{
 "cells": [
  {
   "attachments": {
    "rai_banner.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAABjAAAAGMCAIAAAD7qnwpAAAOEmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy40IChNYWNpbnRvc2gpIgogICB4bXA6Q3JlYXRlRGF0ZT0iMjAyMi0wNy0yN1QxNzoxNzoxMC0wNTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wNy0yOFQxMDoyNToxOC0wNzowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjItMDctMjhUMTA6MjU6MTgtMDc6MDAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgZGM6Zm9ybWF0PSJhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQ4YTcyZDkzLTkwMmQtNDZmMi04ZmNkLWNhYmJlZTE4ZjUwYiIKICAgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjJhM2FkYzIxLThkYTAtYzA0OC04ZmVlLWJiNmIxYjIwYzA1OCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjVlZTk1NmU2LTljMWUtNDZiZi05YzA0LTFjY2I5MjRhMmYzYiIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgdGlmZjpYUmVzb2x1dGlvbj0iMzAwLzEiCiAgIHRpZmY6WVJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOlJlc29sdXRpb25Vbml0PSIyIgogICB0aWZmOkltYWdlV2lkdGg9IjE1ODQiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjM5NiIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICBleGlmOlBpeGVsWERpbWVuc2lvbj0iMTU4NCIKICAgZXhpZjpQaXhlbFlEaW1lbnNpb249IjM5NiI+CiAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgIDxyZGY6QmFnPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0iLiIKICAgICAgcGhvdG9zaG9wOkxheWVyVGV4dD0iLiIvPgogICAgIDxyZGY6bGkKICAgICAgcGhvdG9zaG9wOkxheWVyTmFtZT0iQnVpbGQgRGF0YSBBcHBzICB3aXRoIEludGVsbGlnZW5jZSIKICAgICAgcGhvdG9zaG9wOkxheWVyVGV4dD0iQnVpbGQgRGF0YSBBcHBzICB3aXRoIEludGVsbGlnZW5jZSIvPgogICAgPC9yZGY6QmFnPgogICA8L3Bob3Rvc2hvcDpUZXh0TGF5ZXJzPgogICA8ZGM6dGl0bGU+CiAgICA8cmRmOkFsdD4KICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPmxpbmtlZC1pbi1kcmFmdDQ8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZWU5NTZlNi05YzFlLTQ2YmYtOWMwNC0xY2NiOTI0YTJmM2IiCiAgICAgIHN0RXZ0OndoZW49IjIwMjItMDctMjdUMTc6MTc6MTAtMDU6MDAiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy40IChNYWNpbnRvc2gpIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmJjYjMxYzQxLTJlOTMtNDZlYS05NDlmLTlkMGJjMmY1NjlmYSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wNy0yN1QxNzoyMTozOS0wNTowMCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIzLjQgKE1hY2ludG9zaCkiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YTg2NTIwYmItMDI0Yy00MmRmLThlYWMtMjE5NGU0YWE0ZTNhIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA3LTI3VDE4OjA5OjIzLTA1OjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjMuNCAoTWFjaW50b3NoKSIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiCiAgICAgIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gZG9jdW1lbnQvdm5kLmFkb2JlLmNwc2QrZGN4IHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0iZGVyaXZlZCIKICAgICAgc3RFdnQ6cGFyYW1ldGVycz0iY29udmVydGVkIGZyb20gZG9jdW1lbnQvdm5kLmFkb2JlLmNwc2QrZGN4IHRvIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDhhNzJkOTMtOTAyZC00NmYyLThmY2QtY2FiYmVlMThmNTBiIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA3LTI3VDE4OjA5OjIzLTA1OjAwIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjMuNCAoTWFjaW50b3NoKSIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS4xMC41IgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA3LTI4VDEwOjI1OjE4LTA3OjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHhtcE1NOkRlcml2ZWRGcm9tCiAgICBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmE4NjUyMGJiLTAyNGMtNDJkZi04ZWFjLTIxOTRlNGFhNGUzYSIKICAgIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NWVlOTU2ZTYtOWMxZS00NmJmLTljMDQtMWNjYjkyNGEyZjNiIgogICAgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjVlZTk1NmU2LTljMWUtNDZiZi05YzA0LTFjY2I5MjRhMmYzYiIvPgogIDwvcmRmOkRlc2NyaXB0aW9uPgog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"
    }
   },
   "cell_type": "markdown",
   "id": "acb510ba",
   "metadata": {},
   "source": [
    "![rai_banner.png](attachment:rai_banner.png)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "7d1da0a5",
   "metadata": {},
   "source": [
    "# Degree analysis \n",
    "\n",
    "Degree analysis is widely used in network analysis to identify the most important nodes in a graph. It can be used to enrich the graph with additional information about the nodes. That can be used later on for further analysis with other algorithms.\n",
    "\n",
    "The degree of a node in an undirected graph is the number of edges connected to it. And for directed graphs, in-degree is the number of edges coming into the node, and out-degree is the number of edges going out of the node.\n",
    "\n",
    "Let us look at a very small example social graph and see how we can compute the degrees of its nodes.\n",
    "\n",
    "First, we need to import the `relationalai` library and define our model, which we call `DegreeAnalysis`. We also create a type called `Person`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "62f8cb90",
   "metadata": {},
   "outputs": [],
   "source": [
    "def install_packages():\n",
    "    import os\n",
    "    os.system('pip install relationalai')\n",
    "\n",
    "install_packages()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6a044193",
   "metadata": {},
   "outputs": [],
   "source": [
    "import relationalai as rai\n",
    "from relationalai.std.graphs import Graph\n",
    "\n",
    "model = rai.Model(\"DegreeAnalysis\")\n",
    "Person = model.Type(\"Person\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "be00230c",
   "metadata": {},
   "source": [
    "## Let's add some data to our model\n",
    "\n",
    "We're going to use use a `friendship` list we define as a data source to iterate over it and populate our model with objects. We create `Person` objects with a `name` property and also add a link from one person to the other as a `friends` property.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e8cbfbb8",
   "metadata": {},
   "outputs": [],
   "source": [
    "friendships = [\n",
    "  (\"Alice\", \"Bob\"),  (\"Alice\", \"David\"),\n",
    "  (\"Bob\", \"David\"), (\"Charlie\", \"David\"),\n",
    "  (\"David\", \"Emily\"), (\"Emily\", \"Frank\"), \n",
    "  (\"Emily\", \"Henry\"), (\"Frank\", \"Grace\"),\n",
    "  (\"Frank\", \"Henry\"), (\"Grace\", \"Henry\"),\n",
    "  (\"Kevin\", \"Mark\"), (\"Lily\", \"Mark\"), \n",
    "  (\"Mark\", \"Nancy\"), (\"Nancy\", \"Lily\"),\n",
    "  (\"Mark\", \"Oscar\"), (\"Oscar\", \"Nancy\")\n",
    "]\n",
    "\n",
    "with model.rule(dynamic = True):\n",
    "    for (person_name, friend_name) in friendships:\n",
    "        person = Person.add(name = person_name)\n",
    "        person.friends.add(Person.add(name = friend_name))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be80dc25",
   "metadata": {},
   "source": [
    "## Creating the Graph\n",
    "Let's start by creating a `graph` with nodes and edges. We add all `Person` instances to `Node` type, and assign the `label` property so that we can visualize it later in the graph. We then add the `friends` property to `Edge` type. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d4d248e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a directed graph\n",
    "graph = Graph(model, undirected = False)\n",
    "Node, Edge = graph.Node, graph.Edge\n",
    "\n",
    "# add all Person instances as Nodes, assign `label` property (for displaying)\n",
    "Node.extend(Person, label = Person.name)\n",
    "\n",
    "# add all `friends` properties as Edges\n",
    "Edge.extend(Person.friends)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b2ab73f",
   "metadata": {},
   "source": [
    "## Running the algorithm\n",
    "\n",
    "To calculate the degree of each node, we use the `degree` function from RelationalAI's `compute` object of a graph. We set the result as a property of a `Node` representing a person."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "046b547e",
   "metadata": {},
   "outputs": [],
   "source": [
    "with model.rule():\n",
    "    person = Person()\n",
    "    person_node = Node(person)\n",
    "    degree = graph.compute.degree(person_node)\n",
    "    person_node.set(degree = degree)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "f52cf80d",
   "metadata": {},
   "source": [
    "## Visualizing the results\n",
    "\n",
    "To better understand the results, we can visualize the graph using the `visualize` function on the graph object. We set the node size to be proportional to the `degree` score from the previous step. We also set the color for the nodes and edges."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4aa7a35d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "  <style>\n",
       "    /* Main divisions */\n",
       "    #iyhTGFxv1QMD11hGy-main-div {\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      padding: 3px;\n",
       "      background-color: white;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-left-div {\n",
       "      float: left;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-right-div {\n",
       "      float: left;\n",
       "      height: 100%;\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-right-inner-div {\n",
       "      padding-left: 5px;\n",
       "      padding-right: 2px;\n",
       "      overflow-x: hidden;\n",
       "      overflow-y: auto;\n",
       "      height: 100%;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Graph and details (contained in left-inner-div) */\n",
       "    #iyhTGFxv1QMD11hGy-graph-div {\n",
       "      overflow: hidden;\n",
       "      resize: vertical;\n",
       "      position: relative;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-details-div {\n",
       "      overflow: auto;\n",
       "      resize: vertical;\n",
       "      margin-top: 5px;\n",
       "      border: 1px solid #ccc;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);\n",
       "      display: none;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-details-head {\n",
       "      user-select: none;\n",
       "      padding-left: 4px !important;\n",
       "      padding-top: 4px !important;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: gray;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-details-body {\n",
       "      padding: 10px;\n",
       "      padding-top: 6px;\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "\n",
       "    /* Control menu (contained in right-inner-div) */\n",
       "    .iyhTGFxv1QMD11hGy-menu-item-head {\n",
       "      font-size: 11px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      cursor: pointer;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 0px;\n",
       "      padding-top: 5px;\n",
       "      padding-bottom: 5px;\n",
       "      margin-bottom: 5px;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-menu-item-body {\n",
       "      margin-left: 5px;\n",
       "      margin-bottom: 10px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-menu-subitem-head {\n",
       "      font-size: 9px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-weight: 600;\n",
       "      color: #006429;\n",
       "      cursor: default;\n",
       "      margin-bottom: 2px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-menu-subitem-body {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      margin-left: 7px;\n",
       "      margin-bottom: 5px;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-labeled-input {\n",
       "      all: initial;\n",
       "      display: flex;\n",
       "      align-items: center;\n",
       "      margin-top: 1px;\n",
       "      margin-bottom: 1px;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-label {\n",
       "      all: initial;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-slider {\n",
       "      width: 100%;\n",
       "      margin-bottom: 2px;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-slider::-moz-focus-outer {\n",
       "      border: 0;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-slider-text-left {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      font-style: italic;\n",
       "      color: black;\n",
       "      float: left;\n",
       "      margin-top: 2px;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-slider-text-right {\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      float: right;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-checkbox {\n",
       "      margin-left: 0px !important;\n",
       "      margin-right: 4px !important;\n",
       "      margin-top: 2px !important;\n",
       "      margin-bottom: 2px !important;\n",
       "      padding: 0px !important;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-select {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f5f5f5;\n",
       "      width: 100%;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 5px;\n",
       "      padding-right: 10px;\n",
       "      margin-right: 5px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "\n",
       "      -moz-appearance: none;\n",
       "      -webkit-appearance: none;\n",
       "      appearance: none;\n",
       "      background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOTIuNCIgaGVpZ2h0PSIyOTIuNCI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTSAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2IDI5Mi4zOTk5OSw2NC41NzI2NTQgMTQ2LjE5OTk3LDIzMy42Mjg0NyAtNS4yMDY0NjJlLTYsNjQuNTcyNjU2Ii8+PC9zdmc+Cg==');\n",
       "      background-repeat: no-repeat;\n",
       "      background-position: right 4px top 50%;\n",
       "      background-size: 6px;\n",
       "    }\n",
       "    @-moz-document url-prefix() {\n",
       "      /* Dirty hack to remove dotted border on focus */\n",
       "      .iyhTGFxv1QMD11hGy-select {\n",
       "        color: transparent !important;\n",
       "        text-shadow: 0 0 0 black !important;\n",
       "      }\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-select:after {\n",
       "      cursor: pointer;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-button {\n",
       "      cursor: pointer;\n",
       "      outline: none;\n",
       "      font-size: 8px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      color: black;\n",
       "      background-color: #f2f2f2;\n",
       "      padding-top: 4px !important;\n",
       "      padding-bottom: 4px !important;\n",
       "      padding-left: 10px;\n",
       "      padding-right: 10px;\n",
       "      margin-top: 2px;\n",
       "      margin-bottom: 2px;\n",
       "      border-radius: 4px;\n",
       "      border: 1.2px solid #bbb;\n",
       "      box-shadow: 0 1px 0 1px rgba(0, 0, 0, 0.04);\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-button:hover {\n",
       "      border: 1.2px solid #999;\n",
       "      background-color: #f2f2f2;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-button:active {\n",
       "      background-color: #ddd;\n",
       "    }\n",
       "    .iyhTGFxv1QMD11hGy-button::-moz-focus-inner {\n",
       "      border: 0;\n",
       "    }\n",
       "    /* Hidden menu items */\n",
       "    #iyhTGFxv1QMD11hGy-graph-select-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-node-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-edge-size-norm-div {\n",
       "      display: none;\n",
       "    }\n",
       "\n",
       "    /* Graph */\n",
       "    #iyhTGFxv1QMD11hGy-tooltip-div {\n",
       "      font-size: 10px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42001;\n",
       "      opacity: 0;\n",
       "      visibility: hidden;\n",
       "      position: absolute !important;\n",
       "      max-width: 40%;\n",
       "      padding: 5px;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      border: 1px solid #ccc;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-menu-toggle-button, #iyhTGFxv1QMD11hGy-details-toggle-button, #iyhTGFxv1QMD11hGy-progress-container {\n",
       "      font-size: 14px;\n",
       "      font-family: \"Lucida Console\", Monaco, monospace;\n",
       "      z-index: 42000;\n",
       "      cursor: pointer;\n",
       "      position: absolute;\n",
       "      background-color: white;\n",
       "      border-radius: 4px;\n",
       "      box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-menu-toggle-button {\n",
       "      top: 0;\n",
       "      right: 0;\n",
       "      padding-left: 6px;\n",
       "      padding-right: 6px;\n",
       "      padding-top: 12px;\n",
       "      padding-bottom: 12px;\n",
       "      border-top: 0px;\n",
       "      border-right: 0px;\n",
       "      border-bottom: 1px solid #ccc;\n",
       "      border-left: 1px solid #ccc;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-details-toggle-button {\n",
       "      bottom: 0;\n",
       "      left: 0;\n",
       "      padding-left: 19px;\n",
       "      padding-right: 19px;\n",
       "      padding-top: 0.5px;\n",
       "      padding-bottom: 2px;\n",
       "      border-top: 1px solid #ccc;\n",
       "      border-right: 1px solid #ccc;\n",
       "      border-bottom: 0px;\n",
       "      border-left: 0px;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-progress-container {\n",
       "      font-size: 10px;\n",
       "      text-align: center;\n",
       "      top: 46%;\n",
       "      left: 15%;\n",
       "      width: 70%;\n",
       "      padding: 8px;\n",
       "      border: none;\n",
       "      box-shadow: none;\n",
       "    }\n",
       "\n",
       "    /* Details */\n",
       "    #iyhTGFxv1QMD11hGy-details-user-provided {\n",
       "      margin-top: 3px;\n",
       "      padding-top: 3.5px;\n",
       "      border-top: 0.5px dashed black;\n",
       "      line-height: normal;\n",
       "      box-sizing: content-box;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "    }\n",
       "    #iyhTGFxv1QMD11hGy-details-user-provided ul {\n",
       "      list-style-position: inside;\n",
       "      padding-left: 6px;\n",
       "    }\n",
       "\n",
       "    /* Unavailable in vis.js and therefore hidden */\n",
       "    #iyhTGFxv1QMD11hGy-svg,\n",
       "    #iyhTGFxv1QMD11hGy-node-label-rotation,\n",
       "    #iyhTGFxv1QMD11hGy-edge-label-rotation {\n",
       "      display: none;\n",
       "    }\n",
       "    /* Specific to vis.js */\n",
       "    div.vis-tooltip {\n",
       "      position: absolute;\n",
       "      visibility: hidden;\n",
       "      pointer-events: none;\n",
       "      z-index: 5;\n",
       "      max-width: 40%;\n",
       "      white-space: pre-wrap;\n",
       "      word-break: break-word;\n",
       "      font-size: 10px;\n",
       "      padding: 5px;\n",
       "      color: black;\n",
       "      background-color: white;\n",
       "      -moz-border-radius: 3px;\n",
       "      -webkit-border-radius: 3px;\n",
       "      border-radius: 3px;\n",
       "      border: 0.5px solid black;\n",
       "      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3);\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "  <div id=\"iyhTGFxv1QMD11hGy-main-div\">\n",
       "    <div id=\"iyhTGFxv1QMD11hGy-tooltip-div\"></div>\n",
       "\n",
       "    <div id=\"iyhTGFxv1QMD11hGy-left-div\">\n",
       "      <div id=\"iyhTGFxv1QMD11hGy-left-inner-div\">\n",
       "        <div id=\"iyhTGFxv1QMD11hGy-graph-div\"></div>\n",
       "        <div id=\"iyhTGFxv1QMD11hGy-details-div\">\n",
       "          <div id=\"iyhTGFxv1QMD11hGy-details-head\">\n",
       "            Details for selected element\n",
       "          </div>\n",
       "          <div id=\"iyhTGFxv1QMD11hGy-details-body\">\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "\n",
       "    <div id=\"iyhTGFxv1QMD11hGy-right-div\">\n",
       "      <div id=\"iyhTGFxv1QMD11hGy-right-inner-div\">\n",
       "        <!-- Menu: General -->\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-general-head\">\n",
       "          General\n",
       "        </div>\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-general-body\">\n",
       "          <!-- Sub-menu: State -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              App state\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <button class=\"iyhTGFxv1QMD11hGy-button\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-reset\"\n",
       "                      type=\"button\">Reset</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Display mode (fullscreen or not) -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Display mode\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <button class=\"iyhTGFxv1QMD11hGy-button\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-fullscreen-button\"\n",
       "                      type=\"button\">Enter full screen</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Export -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Export\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <button class=\"iyhTGFxv1QMD11hGy-button\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-svg\"\n",
       "                      type=\"button\">SVG</button>\n",
       "              <button class=\"iyhTGFxv1QMD11hGy-button\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-png\"\n",
       "                      type=\"button\">PNG</button>\n",
       "              <button class=\"iyhTGFxv1QMD11hGy-button\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-jpg\"\n",
       "                      type=\"button\">JPG</button>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Data -->\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-data-head\">\n",
       "          Data selection\n",
       "        </div>\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-data-body\">\n",
       "          <!-- Sub-menu: Graph (only shown if multiple graphs in data) -->\n",
       "          <div id=\"iyhTGFxv1QMD11hGy-graph-select-div\">\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Graph\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <select class=\"iyhTGFxv1QMD11hGy-select\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-graph-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node label text -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Node label text\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <select class=\"iyhTGFxv1QMD11hGy-select\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-node-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge label text -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Edge label text\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <select class=\"iyhTGFxv1QMD11hGy-select\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-edge-label-data-source-select\"></select>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Node size -->\n",
       "          <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "            Node size\n",
       "          </div>\n",
       "          <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iyhTGFxv1QMD11hGy-select\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-node-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-node-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                     for=\"iyhTGFxv1QMD11hGy-node-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iyhTGFxv1QMD11hGy-node-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-node-size-normalization-min-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-node-size-normalization-max-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"300.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Edge size -->\n",
       "          <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "            Edge size\n",
       "          </div>\n",
       "          <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "            <div>\n",
       "              <select class=\"iyhTGFxv1QMD11hGy-select\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-edge-size-data-source-select\"></select>\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-edge-size-normalization-checkbox\"\n",
       "                     type=\"checkbox\">\n",
       "              <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                     for=\"iyhTGFxv1QMD11hGy-edge-size-normalization-checkbox\">Normalize</label>\n",
       "            </div>\n",
       "            <div id=\"iyhTGFxv1QMD11hGy-edge-size-norm-div\">\n",
       "              <div>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Minimum</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-edge-size-normalization-min-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-edge-size-normalization-min-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Maximum</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-edge-size-normalization-max-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-edge-size-normalization-max-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"50.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Nodes -->\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-node-head\">\n",
       "          Nodes\n",
       "        </div>\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-node-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-node-checkbox\">Show nodes</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-node-size-factor-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Position -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Position\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <button class=\"iyhTGFxv1QMD11hGy-button\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-node-release-button\"\n",
       "                      type=\"button\">Release fixed nodes</button>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Drag behavior -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Drag behavior\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-drag-fix-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-node-drag-fix-checkbox\">Fix node position</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-hover-neighborhood-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-node-hover-neighborhood-checkbox\">Show neighborhood</label>\n",
       "              </div>\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-node-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node images -->\n",
       "        <div id=\"iyhTGFxv1QMD11hGy-node-image-meta-control\">\n",
       "          <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "               id=\"iyhTGFxv1QMD11hGy-node-image-head\">\n",
       "            Node images\n",
       "          </div>\n",
       "          <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "               id=\"iyhTGFxv1QMD11hGy-node-image-body\">\n",
       "            <!-- Sub-menu: Visibility -->\n",
       "            <div>\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "                Visibility\n",
       "              </div>\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "                <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                  <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                         id=\"iyhTGFxv1QMD11hGy-node-image-checkbox\"\n",
       "                         type=\"checkbox\">\n",
       "                  <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                         for=\"iyhTGFxv1QMD11hGy-node-image-checkbox\">Show node images</label>\n",
       "                </div>\n",
       "              </div>\n",
       "            </div>\n",
       "            <!-- Sub-menu: Size -->\n",
       "            <div>\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "                Size\n",
       "              </div>\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Scaling factor</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-node-image-size-factor-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-image-size-factor-slider\"\n",
       "                       type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Node labels -->\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-node-label-head\">\n",
       "          Node labels\n",
       "        </div>\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-node-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-node-label-checkbox\">Show node labels</label>\n",
       "              </div>\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-node-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-node-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                    id=\"iyhTGFxv1QMD11hGy-node-label-size-factor-text\"></span>\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-node-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iyhTGFxv1QMD11hGy-node-label-rotation\">\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Angle</span>\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                    id=\"iyhTGFxv1QMD11hGy-node-label-rotation-text\"></span>\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-node-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edges -->\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-edge-head\">\n",
       "          Edges\n",
       "        </div>\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-edge-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-edge-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-edge-checkbox\">Show edges</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                    id=\"iyhTGFxv1QMD11hGy-edge-size-factor-text\"></span>\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-edge-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Form -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Form\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Curvature</span>\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                    id=\"iyhTGFxv1QMD11hGy-edge-curvature-text\"></span>\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-edge-curvature-slider\"\n",
       "                     type=\"range\" min=\"-1.2\" max=\"1.2\" step=\"0.02\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Hover behavior -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Hover behavior\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-edge-hover-tooltip-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-edge-hover-tooltip-checkbox\">Show tooltips (if provided)</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Edge labels -->\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-edge-label-head\">\n",
       "          Edge labels\n",
       "        </div>\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-edge-label-body\">\n",
       "          <!-- Sub-menu: Visibility -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Visibility\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-edge-label-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-edge-label-checkbox\">Show edge labels</label>\n",
       "              </div>\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-edge-label-border-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-edge-label-border-checkbox\">Show borders</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Size -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Size\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Scaling factor</span>\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                    id=\"iyhTGFxv1QMD11hGy-edge-label-size-factor-text\"></span>\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-edge-label-size-factor-slider\"\n",
       "                     type=\"range\" min=\"0.01\" max=\"5.0\" step=\"0.01\">\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Rotation -->\n",
       "          <div id=\"iyhTGFxv1QMD11hGy-edge-label-rotation\">\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Rotation\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Angle</span>\n",
       "              <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-edge-label-rotation-text\"></span>\n",
       "              <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                     id=\"iyhTGFxv1QMD11hGy-edge-label-rotation-slider\"\n",
       "                     type=\"range\" min=\"0.0\" max=\"359.0\" step=\"1.0\">\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "        <!-- Menu: Layout algorithm -->\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-head\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-layout-algorithm-head\">\n",
       "          Layout algorithm\n",
       "        </div>\n",
       "        <div class=\"iyhTGFxv1QMD11hGy-menu-item-body\"\n",
       "             id=\"iyhTGFxv1QMD11hGy-layout-algorithm-body\">\n",
       "          <!-- Sub-menu: Simulation -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Simulation\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div class=\"iyhTGFxv1QMD11hGy-labeled-input\">\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-checkbox\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-simulation-active-checkbox\"\n",
       "                       type=\"checkbox\">\n",
       "                <label class=\"iyhTGFxv1QMD11hGy-label\"\n",
       "                       for=\"iyhTGFxv1QMD11hGy-simulation-active-checkbox\">Active</label>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Algorithm -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Algorithm\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div>\n",
       "                <select class=\"iyhTGFxv1QMD11hGy-select\"\n",
       "                        id=\"iyhTGFxv1QMD11hGy-layout-algorithm-select\"></select>\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "          <!-- Sub-menu: Parameters -->\n",
       "          <div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-head\">\n",
       "              Parameters\n",
       "            </div>\n",
       "            <div class=\"iyhTGFxv1QMD11hGy-menu-subitem-body\">\n",
       "              <div id=\"iyhTGFxv1QMD11hGy-gravitational-constant-div\">\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Gravitational constant</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-gravitational-constant-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-gravitational-constant-slider\"\n",
       "                       type=\"range\" min=\"-50000\" max=\"0\" step=\"1\"\n",
       "                       style=\"direction:rtl;\">\n",
       "              </div>\n",
       "              <div id=\"iyhTGFxv1QMD11hGy-spring-length-div\">\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Spring length</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-spring-length-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-spring-length-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"500\" step=\"0.1\">\n",
       "              </div>\n",
       "              <div id=\"iyhTGFxv1QMD11hGy-spring-constant-div\">\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Spring constant</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-spring-constant-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-spring-constant-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iyhTGFxv1QMD11hGy-avoid-overlap-div\">\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Avoid overlap</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-avoid-overlap-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-avoid-overlap-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"1.0\" step=\"0.01\">\n",
       "              </div>\n",
       "              <div id=\"iyhTGFxv1QMD11hGy-central-gravity-div\">\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-left\">Central gravity</span>\n",
       "                <span class=\"iyhTGFxv1QMD11hGy-slider-text-right\"\n",
       "                      id=\"iyhTGFxv1QMD11hGy-central-gravity-text\"></span>\n",
       "                <input class=\"iyhTGFxv1QMD11hGy-slider\"\n",
       "                       id=\"iyhTGFxv1QMD11hGy-central-gravity-slider\"\n",
       "                       type=\"range\" min=\"0.0\" max=\"10.0\" step=\"0.001\">\n",
       "              </div>\n",
       "            </div>\n",
       "          </div>\n",
       "        </div>\n",
       "      </div>\n",
       "    </div>\n",
       "  </div>\n",
       "\n",
       "  <script charset=\"utf-8\" type=\"text/javascript\">\n",
       "    if(typeof(require) === \"undefined\"){\n",
       "      // Project sites:    https://requirejs.org\n",
       "//                   https://github.com/requirejs/requirejs\n",
       "// Code source:      https://requirejs.org/docs/release/2.3.6/minified/require.js - accessed on 19.11.2020\n",
       "// Original license: MIT\n",
       "// Code changes:     None\n",
       "\n",
       "/** vim: et:ts=4:sw=4:sts=4\n",
       " * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors.\n",
       " * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE\n",
       " */\n",
       "var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version=\"2.3.6\",commentRegExp=/\\/\\*[\\s\\S]*?\\*\\/|([^:\"'=]|^)\\/\\/.*$/gm,cjsRequireRegExp=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,jsSuffixRegExp=/\\.js$/,currDirRegExp=/^\\.\\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!(\"undefined\"==typeof window||\"undefined\"==typeof navigator||!window.document),isWebWorker=!isBrowser&&\"undefined\"!=typeof importScripts,readyRegExp=isBrowser&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName=\"_\",isOpera=\"undefined\"!=typeof opera&&\"[object Opera]\"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||\"\"}function isFunction(e){return\"[object Function]\"===ostring.call(e)}function isArray(e){return\"[object Array]\"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){var i;if(e)for(i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));i-=1);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){var i;for(i in e)if(hasProp(e,i)&&t(e[i],i))break}function mixin(i,e,r,n){return e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||\"object\"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))}),i}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName(\"script\")}function defaultOnError(e){throw e}function getGlobal(e){if(!e)return e;var t=global;return each(e.split(\".\"),function(e){t=t[e]}),t}function makeError(e,t,i,r){var n=new Error(t+\"\\nhttps://requirejs.org/docs/errors.html#\"+e);return n.requireType=e,n.requireModules=r,i&&(n.originalError=i),n}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o,a=defContextName;return isArray(e)||\"string\"==typeof e||(o=e,isArray(t)?(e=t,t=i,i=r):e=[]),o&&o.context&&(a=o.context),(n=getOwn(contexts,a))||(n=contexts[a]=req.s.newContext(a)),o&&n.configure(o),n.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require||(require=req),req.version=version,req.jsExtRegExp=/^\\/|:|\\?|\\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName(\"head\")[0],baseElement=document.getElementsByTagName(\"base\")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");return r.type=e.scriptType||\"text/javascript\",r.charset=\"utf-8\",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute(\"data-requirecontext\",t.contextName),e.setAttribute(\"data-requiremodule\",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf(\"[native code\")<0||isOpera?(e.addEventListener(\"load\",t.onScriptLoad,!1),e.addEventListener(\"error\",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent(\"onreadystatechange\",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError(\"importscripts\",\"importScripts failed for \"+i+\" at \"+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head||(head=e.parentNode),dataMain=e.getAttribute(\"data-main\"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf(\"!\")||(mainScript=(src=mainScript.split(\"/\")).pop(),subPath=src.length?src.join(\"/\")+\"/\":\"./\",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,\"\"),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;\"string\"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(i))),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e||(e=r.getAttribute(\"data-requiremodule\")),n=contexts[r.getAttribute(\"data-requirecontext\")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var i,e,l,c,d,g={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},p={},f={},r={},h=[],m={},n={},v={},x=1,b=1;function q(e,t,i){var r,n,o,a,s,u,c,d,p,f,l=t&&t.split(\"/\"),h=g.map,m=h&&h[\"*\"];if(e&&(u=(e=e.split(\"/\")).length-1,g.nodeIdCompat&&jsSuffixRegExp.test(e[u])&&(e[u]=e[u].replace(jsSuffixRegExp,\"\")),\".\"===e[0].charAt(0)&&l&&(e=l.slice(0,l.length-1).concat(e)),function(e){var t,i;for(t=0;t<e.length;t++)if(\".\"===(i=e[t]))e.splice(t,1),t-=1;else if(\"..\"===i){if(0===t||1===t&&\"..\"===e[2]||\"..\"===e[t-1])continue;0<t&&(e.splice(t-1,2),t-=2)}}(e),e=e.join(\"/\")),i&&h&&(l||m)){e:for(o=(n=e.split(\"/\")).length;0<o;o-=1){if(s=n.slice(0,o).join(\"/\"),l)for(a=l.length;0<a;a-=1)if((r=getOwn(h,l.slice(0,a).join(\"/\")))&&(r=getOwn(r,s))){c=r,d=o;break e}!p&&m&&getOwn(m,s)&&(p=getOwn(m,s),f=o)}!c&&p&&(c=p,d=f),c&&(n.splice(0,d,c),e=n.join(\"/\"))}return getOwn(g.pkgs,e)||e}function E(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute(\"data-requiremodule\")===t&&e.getAttribute(\"data-requirecontext\")===l.contextName)return e.parentNode.removeChild(e),!0})}function w(e){var t=getOwn(g.paths,e);if(t&&isArray(t)&&1<t.length)return t.shift(),l.require.undef(e),l.makeRequire(null,{skipMap:!0})([e]),!0}function y(e){var t,i=e?e.indexOf(\"!\"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function S(e,t,i,r){var n,o,a,s,u=null,c=t?t.name:null,d=e,p=!0,f=\"\";return e||(p=!1,e=\"_@r\"+(x+=1)),u=(s=y(e))[0],e=s[1],u&&(u=q(u,c,r),o=getOwn(m,u)),e&&(u?f=i?e:o&&o.normalize?o.normalize(e,function(e){return q(e,c,r)}):-1===e.indexOf(\"!\")?q(e,c,r):e:(u=(s=y(f=q(e,c,r)))[0],f=s[1],i=!0,n=l.nameToUrl(f))),{prefix:u,name:f,parentMap:t,unnormalized:!!(a=!u||o||i?\"\":\"_unnormalized\"+(b+=1)),url:n,originalName:d,isDefine:p,id:(u?u+\"!\"+f:f)+a}}function k(e){var t=e.id,i=getOwn(p,t);return i||(i=p[t]=new l.Module(e)),i}function M(e,t,i){var r=e.id,n=getOwn(p,r);!hasProp(m,r)||n&&!n.defineEmitComplete?(n=k(e)).error&&\"error\"===t?i(n.error):n.on(t,i):\"defined\"===t&&i(m[r])}function O(i,e){var t=i.requireModules,r=!1;e?e(i):(each(t,function(e){var t=getOwn(p,e);t&&(t.error=i,t.events.error&&(r=!0,t.emit(\"error\",i)))}),r||req.onError(i))}function j(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];\"string\"==typeof t&&(l.defQueueMap[t]=!0),h.push(e)}),globalDefQueue=[])}function P(e){delete p[e],delete f[e]}function R(){var e,r,t=1e3*g.waitSeconds,n=t&&l.startTime+t<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!i){if(i=!0,eachProp(f,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)w(i)?s=r=!0:(o.push(i),E(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError(\"timeout\",\"Load timeout for modules: \"+o,null,o)).contextName=l.contextName,O(e);u&&each(a,function(e){!function n(o,a,s){var e=o.map.id;o.error?o.emit(\"error\",o.error):(a[e]=!0,each(o.depMaps,function(e,t){var i=e.id,r=getOwn(p,i);!r||o.depMatched[t]||s[i]||(getOwn(a,i)?(o.defineDep(t,m[i]),o.check()):n(r,a,s))}),s[e]=!0)}(e,{},{})}),n&&!r||!s||!isBrowser&&!isWebWorker||d||(d=setTimeout(function(){d=0,R()},50)),i=!1}}function a(e){hasProp(m,e[0])||k(S(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){var t=e.currentTarget||e.srcElement;return o(t,l.onScriptLoad,\"load\",\"onreadystatechange\"),o(t,l.onScriptError,\"error\"),{node:t,id:t&&t.getAttribute(\"data-requiremodule\")}}function T(){var e;for(j();h.length;){if(null===(e=h.shift())[0])return O(makeError(\"mismatch\",\"Mismatched anonymous define() module: \"+e[e.length-1]));a(e)}l.defQueueMap={}}return c={require:function(e){return e.require?e.require:e.require=l.makeRequire(e.map)},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?m[e.map.id]=e.exports:e.exports=m[e.map.id]={}},module:function(e){return e.module?e.module:e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(g.config,e.map.id)||{}},exports:e.exports||(e.exports={})}}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(g.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on(\"error\",i):this.events.error&&(i=bind(this,function(e){this.emit(\"error\",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,l.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,l.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,e,i=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit(\"error\",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=l.execCb(i,o,r,n)}catch(e){t=e}else n=l.execCb(i,o,r,n);if(this.map.isDefine&&void 0===n&&((e=this.module)?n=e.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?\"define\":\"require\",O(this.error=t)}else n=o;if(this.exports=n,this.map.isDefine&&!this.ignore&&(m[i]=n,req.onResourceLoad)){var a=[];each(this.depMaps,function(e){a.push(e.normalizedMap||e)}),req.onResourceLoad(l,this.map,a)}P(i),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else hasProp(l.defQueueMap,i)||this.fetch()}},callPlugin:function(){var u=this.map,c=u.id,e=S(u.prefix);this.depMaps.push(e),M(e,\"defined\",bind(this,function(e){var o,t,i,r=getOwn(v,this.map.id),n=this.map.name,a=this.map.parentMap?this.map.parentMap.name:null,s=l.makeRequire(u.parentMap,{enableBuildCallback:!0});return this.map.unnormalized?(e.normalize&&(n=e.normalize(n,function(e){return q(e,a,!0)})||\"\"),M(t=S(u.prefix+\"!\"+n,this.map.parentMap,!0),\"defined\",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),void((i=getOwn(p,t.id))&&(this.depMaps.push(t),this.events.error&&i.on(\"error\",bind(this,function(e){this.emit(\"error\",e)})),i.enable()))):r?(this.map.url=l.nameToUrl(r),void this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[c],eachProp(p,function(e){0===e.map.id.indexOf(c+\"_unnormalized\")&&P(e.map.id)}),O(e)}),o.fromText=bind(this,function(e,t){var i=u.name,r=S(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),k(r),hasProp(g.config,c)&&(g.config[i]=g.config[c]);try{req.exec(e)}catch(e){return O(makeError(\"fromtexteval\",\"fromText eval for \"+c+\" failed: \"+e,e,[c]))}n&&(useInteractive=!0),this.depMaps.push(r),l.completeLoad(i),s([i],o)}),void e.load(u.name,s,o,g))})),l.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(f[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r,n;if(\"string\"==typeof e){if(e=S(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,n=getOwn(c,e.id))return void(this.depExports[t]=n(this));this.depCount+=1,M(e,\"defined\",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?M(e,\"error\",bind(this,this.errback)):this.events.error&&M(e,\"error\",bind(this,function(e){this.emit(\"error\",e)}))}i=e.id,r=p[i],hasProp(c,i)||!r||r.enabled||l.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(p,e.id);t&&!t.enabled&&l.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var i=this.events[e];i||(i=this.events[e]=[]),i.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),\"error\"===e&&delete this.events[e]}},(l={config:g,contextName:u,registry:p,defined:m,urlFetched:n,defQueue:h,defQueueMap:{},Module:e,makeModuleMap:S,nextTick:req.nextTick,onError:O,configure:function(e){if(e.baseUrl&&\"/\"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+=\"/\"),\"string\"==typeof e.urlArgs){var i=e.urlArgs;e.urlArgs=function(e,t){return(-1===t.indexOf(\"?\")?\"?\":\"&\")+i}}var r=g.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(g[t]||(g[t]={}),mixin(g[t],e,!0,!0)):g[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(v[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),!e.exports&&!e.init||e.exportsFn||(e.exportsFn=l.makeShimExports(e)),r[t]=e}),g.shim=r),e.packages&&each(e.packages,function(e){var t;t=(e=\"string\"==typeof e?{name:e}:e).name,e.location&&(g.paths[t]=e.location),g.pkgs[t]=e.name+\"/\"+(e.main||\"main\").replace(currDirRegExp,\"\").replace(jsSuffixRegExp,\"\")}),eachProp(p,function(e,t){e.inited||e.map.unnormalized||(e.map=S(t,null,!0))}),(e.deps||e.callback)&&l.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return t.init&&(e=t.init.apply(global,arguments)),e||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),\"string\"==typeof e?isFunction(t)?O(makeError(\"requireargs\",\"Invalid require call\"),i):o&&hasProp(c,e)?c[e](p[o.id]):req.get?req.get(l,e,o,s):(r=S(e,o,!1,!0).id,hasProp(m,r)?m[r]:O(makeError(\"notloaded\",'Module name \"'+r+'\" has not been loaded yet for context: '+u+(o?\"\":\". Use require([])\")))):(T(),l.nextTick(function(){T(),(n=k(S(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),R()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf(\".\"),r=e.split(\"/\")[0];return-1!==i&&(!(\".\"===r||\"..\"===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),l.nameToUrl(q(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(m,S(e,o,!1,!0).id)},specified:function(e){return e=S(e,o,!1,!0).id,hasProp(m,e)||hasProp(p,e)}}),o||(s.undef=function(i){j();var e=S(i,o,!0),t=getOwn(p,i);t.undefed=!0,E(i),delete m[i],delete n[e.url],delete r[i],eachReverse(h,function(e,t){e[0]===i&&h.splice(t,1)}),delete l.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),P(i))}),s},enable:function(e){getOwn(p,e.id)&&k(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(g.shim,e)||{},o=n.exports;for(j();h.length;){if(null===(i=h.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(l.defQueueMap={},r=getOwn(p,e),!t&&!hasProp(m,e)&&r&&!r.inited){if(!(!g.enforceDefine||o&&getGlobal(o)))return w(e)?void 0:O(makeError(\"nodefine\",\"No define call for \"+e,null,[e]));a([e,n.deps||[],n.exportsFn])}R()},nameToUrl:function(e,t,i){var r,n,o,a,s,u,c=getOwn(g.pkgs,e);if(c&&(e=c),u=getOwn(v,e))return l.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||\"\");else{for(r=g.paths,o=(n=e.split(\"/\")).length;0<o;o-=1)if(s=getOwn(r,n.slice(0,o).join(\"/\"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join(\"/\"),a=(\"/\"===(a+=t||(/^data\\:|^blob\\:|\\?/.test(a)||i?\"\":\".js\")).charAt(0)||a.match(/^[\\w\\+\\.\\-]+:/)?\"\":g.baseUrl)+a}return g.urlArgs&&!/^blob\\:/.test(a)?a+g.urlArgs(e,a):a},load:function(e,t){req.load(l,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){if(\"load\"===e.type||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=s(e);l.completeLoad(t.id)}},onScriptError:function(e){var i=s(e);if(!w(i.id)){var r=[];return eachProp(p,function(e,t){0!==t.indexOf(\"_@r\")&&each(e.depMaps,function(e){if(e.id===i.id)return r.push(t),!0})}),O(makeError(\"scripterror\",'Script error for \"'+i.id+(r.length?'\", needed by: '+r.join(\", \"):'\"'),e,[i.id]))}}}).require=l.makeRequire(),l}function getInteractiveScript(){return interactiveScript&&\"interactive\"===interactiveScript.readyState||eachReverse(scripts(),function(e){if(\"interactive\"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,\"undefined\"==typeof setTimeout?void 0:setTimeout);\n",
       "\n",
       "    }\n",
       "    // Project sites:    https://visjs.org\n",
       "//                   https://visjs.github.io/vis-network/docs/network\n",
       "//                   https://github.com/visjs/vis-network\n",
       "// Code source:      https://unpkg.com/vis-network@9.1.0/dist/vis-network.min.js - accessed on 19.11.2021\n",
       "// Original license: Apache 2.0 (and MIT because of dual licensing)\n",
       "// Code changes:     Commented out outermost functions\n",
       "//                   Wrapped all into a require define function\n",
       "\n",
       "//                   Replaced two \"NEL\" (=unescaped newline, Unicode U+0085, which can be entered\n",
       "//                   with Ctrl+Shift+U followed be the 4 digits and Enter) symbols by \"\\n\" to\n",
       "//                   prevent browser error when using sphinx docs in combination with Jupyter\n",
       "//                   notebooks and nbsphinx. This might cause unexpected behavior in other cases.\n",
       "\n",
       "if(!require.defined(\"gravis-vis-network\")){\n",
       "  define(\"gravis-vis-network\", [\"exports\"],\n",
       "\n",
       "  /**\n",
       "   * vis-network\n",
       "   * https://visjs.github.io/vis-network/\n",
       "   *\n",
       "   * A dynamic, browser-based visualization library.\n",
       "   *\n",
       "   * @version 9.1.0\n",
       "   * @date    2021-08-29T08:47:25.454Z\n",
       "   *\n",
       "   * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n",
       "   * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n",
       "   *\n",
       "   * @license\n",
       "   * vis.js is dual licensed under both\n",
       "   *\n",
       "   *   1. The Apache 2.0 License\n",
       "   *      http://www.apache.org/licenses/LICENSE-2.0\n",
       "   *\n",
       "   *   and\n",
       "   *\n",
       "   *   2. The MIT License\n",
       "   *      http://opensource.org/licenses/MIT\n",
       "   *\n",
       "   * vis.js may be distributed under either license.\n",
       "   */\n",
       "  // !function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\n",
       "  // \"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(\n",
       "  function(t){\"use strict\";var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}function n(t,e){return t(e={exports:{}},e.exports),e.exports}var o,r,s=function(t){return t&&t.Math==Math&&t},a=s(\"object\"==typeof globalThis&&globalThis)||s(\"object\"==typeof window&&window)||s(\"object\"==typeof self&&self)||s(\"object\"==typeof e&&e)||function(){return this}()||Function(\"return this\")(),h=function(t){try{return!!t()}catch(t){return!0}},l=!h((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),d={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u={f:c&&!d.call({1:2},1)?function(t){var e=c(this,t);return!!e&&e.enumerable}:d},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},p={}.toString,v=function(t){return p.call(t).slice(8,-1)},g=\"\".split,y=h((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==v(t)?g.call(t,\"\"):Object(t)}:Object,m=function(t){if(null==t)throw TypeError(\"Can't call method on \"+t);return t},b=function(t){return y(m(t))},w=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},k={},_=function(t){return\"function\"==typeof t?t:void 0},x=function(t,e){return arguments.length<2?_(k[t])||_(a[t]):k[t]&&k[t][e]||a[t]&&a[t][e]},E=x(\"navigator\",\"userAgent\")||\"\",O=a.process,C=a.Deno,S=O&&O.versions||C&&C.version,T=S&&S.v8;T?r=(o=T.split(\".\"))[0]<4?1:o[0]+o[1]:E&&(!(o=E.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=E.match(/Chrome\\/(\\d+)/))&&(r=o[1]);var M=r&&+r,P=!!Object.getOwnPropertySymbols&&!h((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&M&&M<41})),D=P&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,I=D?function(t){return\"symbol\"==typeof t}:function(t){var e=x(\"Symbol\");return\"function\"==typeof e&&Object(t)instanceof e},B=\"__core-js_shared__\",z=a[B]||function(t,e){try{Object.defineProperty(a,t,{value:e,configurable:!0,writable:!0})}catch(i){a[t]=e}return e}(B,{}),N=n((function(t){(t.exports=function(t,e){return z[t]||(z[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.16.1\",mode:\"pure\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})})),A=function(t){return Object(m(t))},F={}.hasOwnProperty,j=Object.hasOwn||function(t,e){return F.call(A(t),e)},R=0,L=Math.random(),H=function(t){return\"Symbol(\"+String(void 0===t?\"\":t)+\")_\"+(++R+L).toString(36)},W=N(\"wks\"),q=a.Symbol,V=D?q:q&&q.withoutSetter||H,U=function(t){return j(W,t)&&(P||\"string\"==typeof W[t])||(P&&j(q,t)?W[t]=q[t]:W[t]=V(\"Symbol.\"+t)),W[t]},Y=U(\"toPrimitive\"),X=function(t,e){if(!w(t)||I(t))return t;var i,n=t[Y];if(void 0!==n){if(void 0===e&&(e=\"default\"),i=n.call(t,e),!w(i)||I(i))return i;throw TypeError(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var i,n;if(\"string\"===e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;if(\"function\"==typeof(i=t.valueOf)&&!w(n=i.call(t)))return n;if(\"string\"!==e&&\"function\"==typeof(i=t.toString)&&!w(n=i.call(t)))return n;throw TypeError(\"Can't convert object to primitive value\")}(t,e)},G=function(t){var e=X(t,\"string\");return I(e)?e:String(e)},K=a.document,$=w(K)&&w(K.createElement),Z=function(t){return $?K.createElement(t):{}},Q=!l&&!h((function(){return 7!=Object.defineProperty(Z(\"div\"),\"a\",{get:function(){return 7}}).a})),J=Object.getOwnPropertyDescriptor,tt={f:l?J:function(t,e){if(t=b(t),e=G(e),Q)try{return J(t,e)}catch(t){}if(j(t,e))return f(!u.f.call(t,e),t[e])}},et=/#|\\.prototype\\./,it=function(t,e){var i=ot[nt(t)];return i==st||i!=rt&&(\"function\"==typeof e?h(e):!!e)},nt=it.normalize=function(t){return String(t).replace(et,\".\").toLowerCase()},ot=it.data={},rt=it.NATIVE=\"N\",st=it.POLYFILL=\"P\",at=it,ht=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t},lt=function(t,e,i){if(ht(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,o){return t.call(e,i,n,o)}}return function(){return t.apply(e,arguments)}},dt=function(t){if(!w(t))throw TypeError(String(t)+\" is not an object\");return t},ct=Object.defineProperty,ut={f:l?ct:function(t,e,i){if(dt(t),e=G(e),dt(i),Q)try{return ct(t,e,i)}catch(t){}if(\"get\"in i||\"set\"in i)throw TypeError(\"Accessors not supported\");return\"value\"in i&&(t[e]=i.value),t}},ft=l?function(t,e,i){return ut.f(t,e,f(1,i))}:function(t,e,i){return t[e]=i,t},pt=tt.f,vt=function(t){var e=function(e,i,n){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,n)}return t.apply(this,arguments)};return e.prototype=t.prototype,e},gt=function(t,e){var i,n,o,r,s,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?a:f?a[c]:(a[c]||{}).prototype,g=u?k:k[c]||(k[c]={}),y=g.prototype;for(o in e)i=!at(u?o:c+(f?\".\":\"#\")+o,t.forced)&&v&&j(v,o),s=g[o],i&&(h=t.noTargetGet?(d=pt(v,o))&&d.value:v[o]),r=i&&h?h:e[o],i&&typeof s==typeof r||(l=t.bind&&i?lt(r,a):t.wrap&&i?vt(r):p&&\"function\"==typeof r?lt(Function.call,r):r,(t.sham||r&&r.sham||s&&s.sham)&&ft(l,\"sham\",!0),g[o]=l,p&&(j(k,n=c+\"Prototype\")||ft(k,n,{}),k[n][o]=r,t.real&&y&&!y[o]&&ft(y,o,r)))},yt=Math.ceil,mt=Math.floor,bt=function(t){return isNaN(t=+t)?0:(t>0?mt:yt)(t)},wt=Math.min,kt=function(t){return t>0?wt(bt(t),9007199254740991):0},_t=Math.max,xt=Math.min,Et=function(t,e){var i=bt(t);return i<0?_t(i+e,0):xt(i,e)},Ot=function(t){return function(e,i,n){var o,r=b(e),s=kt(r.length),a=Et(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ct={includes:Ot(!0),indexOf:Ot(!1)},St={},Tt=Ct.indexOf,Mt=function(t,e){var i,n=b(t),o=0,r=[];for(i in n)!j(St,i)&&j(n,i)&&r.push(i);for(;e.length>o;)j(n,i=e[o++])&&(~Tt(r,i)||r.push(i));return r},Pt=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],Dt=Object.keys||function(t){return Mt(t,Pt)},It={f:Object.getOwnPropertySymbols},Bt=Object.assign,zt=Object.defineProperty,Nt=!Bt||h((function(){if(l&&1!==Bt({b:1},Bt(zt({},\"a\",{enumerable:!0,get:function(){zt(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol(),n=\"abcdefghijklmnopqrst\";return t[i]=7,n.split(\"\").forEach((function(t){e[t]=t})),7!=Bt({},t)[i]||Dt(Bt({},e)).join(\"\")!=n}))?function(t,e){for(var i=A(t),n=arguments.length,o=1,r=It.f,s=u.f;n>o;)for(var a,h=y(arguments[o++]),d=r?Dt(h).concat(r(h)):Dt(h),c=d.length,f=0;c>f;)a=d[f++],l&&!s.call(h,a)||(i[a]=h[a]);return i}:Bt;gt({target:\"Object\",stat:!0,forced:Object.assign!==Nt},{assign:Nt});var At=k.Object.assign,Ft=[].slice,jt={},Rt=function(t,e,i){if(!(e in jt)){for(var n=[],o=0;o<e;o++)n[o]=\"a[\"+o+\"]\";jt[e]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return jt[e](t,i)},Lt=Function.bind||function(t){var e=ht(this),i=Ft.call(arguments,1),n=function(){var o=i.concat(Ft.call(arguments));return this instanceof n?Rt(e,o.length,o):e.apply(t,o)};return w(e.prototype)&&(n.prototype=e.prototype),n};gt({target:\"Function\",proto:!0},{bind:Lt});var Ht=function(t){return k[t+\"Prototype\"]},Wt=Ht(\"Function\").bind,qt=Function.prototype,Vt=function(t){var e=t.bind;return t===qt||t instanceof Function&&e===qt.bind?Wt:e};function Ut(t,e,i,n){t.beginPath(),t.arc(e,i,n,0,2*Math.PI,!1),t.closePath()}function Yt(t,e,i,n,o,r){var s=Math.PI/180;n-2*r<0&&(r=n/2),o-2*r<0&&(r=o/2),t.beginPath(),t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.arc(e+n-r,i+r,r,270*s,360*s,!1),t.lineTo(e+n,i+o-r),t.arc(e+n-r,i+o-r,r,0,90*s,!1),t.lineTo(e+r,i+o),t.arc(e+r,i+o-r,r,90*s,180*s,!1),t.lineTo(e,i+r),t.arc(e+r,i+r,r,180*s,270*s,!1),t.closePath()}function Xt(t,e,i,n,o){var r=.5522848,s=n/2*r,a=o/2*r,h=e+n,l=i+o,d=e+n/2,c=i+o/2;t.beginPath(),t.moveTo(e,c),t.bezierCurveTo(e,c-a,d-s,i,d,i),t.bezierCurveTo(d+s,i,h,c-a,h,c),t.bezierCurveTo(h,c+a,d+s,l,d,l),t.bezierCurveTo(d-s,l,e,c+a,e,c),t.closePath()}function Gt(t,e,i,n,o){var r=o*(1/3),s=.5522848,a=n/2*s,h=r/2*s,l=e+n,d=i+r,c=e+n/2,u=i+r/2,f=i+(o-r/2),p=i+o;t.beginPath(),t.moveTo(l,u),t.bezierCurveTo(l,u+h,c+a,d,c,d),t.bezierCurveTo(c-a,d,e,u+h,e,u),t.bezierCurveTo(e,u-h,c-a,i,c,i),t.bezierCurveTo(c+a,i,l,u-h,l,u),t.lineTo(l,f),t.bezierCurveTo(l,f+h,c+a,p,c,p),t.bezierCurveTo(c-a,p,e,f+h,e,f),t.lineTo(e,u)}function Kt(t,e,i,n,o,r){t.beginPath(),t.moveTo(e,i);for(var s=r.length,a=n-e,h=o-i,l=h/a,d=Math.sqrt(a*a+h*h),c=0,u=!0,f=0,p=+r[0];d>=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var $t={circle:Ut,dashedLine:Kt,database:Gt,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Xt,ellipse_vis:Xt,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:Yt,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Zt=n((function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[\"$\"+t]=this._callbacks[\"$\"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks[\"$\"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[\"$\"+t],this;for(var o=0;o<n.length;o++)if((i=n[o])===e||i.fn===e){n.splice(o,1);break}return 0===n.length&&delete this._callbacks[\"$\"+t],this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),i=this._callbacks[\"$\"+t],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(i){n=0;for(var o=(i=i.slice(0)).length;n<o;++n)i[n].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[\"$\"+t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}})),Qt=function(t){if(I(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(t)},Jt=function(t){return function(e,i){var n,o,r=Qt(m(e)),s=bt(i),a=r.length;return s<0||s>=a?t?\"\":void 0:(n=r.charCodeAt(s))<55296||n>56319||s+1===a||(o=r.charCodeAt(s+1))<56320||o>57343?t?r.charAt(s):n:t?r.slice(s,s+2):o-56320+(n-55296<<10)+65536}},te={codeAt:Jt(!1),charAt:Jt(!0)},ee=Function.toString;\"function\"!=typeof z.inspectSource&&(z.inspectSource=function(t){return ee.call(t)});var ie,ne,oe,re=z.inspectSource,se=a.WeakMap,ae=\"function\"==typeof se&&/native code/.test(re(se)),he=N(\"keys\"),le=function(t){return he[t]||(he[t]=H(t))},de=\"Object already initialized\",ce=a.WeakMap;if(ae||z.state){var ue=z.state||(z.state=new ce),fe=ue.get,pe=ue.has,ve=ue.set;ie=function(t,e){if(pe.call(ue,t))throw new TypeError(de);return e.facade=t,ve.call(ue,t,e),e},ne=function(t){return fe.call(ue,t)||{}},oe=function(t){return pe.call(ue,t)}}else{var ge=le(\"state\");St[ge]=!0,ie=function(t,e){if(j(t,ge))throw new TypeError(de);return e.facade=t,ft(t,ge,e),e},ne=function(t){return j(t,ge)?t[ge]:{}},oe=function(t){return j(t,ge)}}var ye,me,be,we={set:ie,get:ne,has:oe,enforce:function(t){return oe(t)?ne(t):ie(t,{})},getterFor:function(t){return function(e){var i;if(!w(e)||(i=ne(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return i}}},ke=!h((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_e=le(\"IE_PROTO\"),xe=Object.prototype,Ee=ke?Object.getPrototypeOf:function(t){return t=A(t),j(t,_e)?t[_e]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?xe:null},Oe=U(\"iterator\"),Ce=!1;[].keys&&(\"next\"in(be=[].keys())?(me=Ee(Ee(be)))!==Object.prototype&&(ye=me):Ce=!0);var Se=null==ye||h((function(){var t={};return ye[Oe].call(t)!==t}));Se&&(ye={}),Se&&!j(ye,Oe)&&ft(ye,Oe,(function(){return this}));var Te,Me={IteratorPrototype:ye,BUGGY_SAFARI_ITERATORS:Ce},Pe=l?Object.defineProperties:function(t,e){dt(t);for(var i,n=Dt(e),o=n.length,r=0;o>r;)ut.f(t,i=n[r++],e[i]);return t},De=x(\"document\",\"documentElement\"),Ie=le(\"IE_PROTO\"),Be=function(){},ze=function(t){return\"<script>\"+t+\"</\"+\"script>\"},Ne=function(t){t.write(ze(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},Ae=function(){try{Te=new ActiveXObject(\"htmlfile\")}catch(t){}Ae=document.domain&&Te?Ne(Te):function(){var t,e=Z(\"iframe\");if(e.style)return e.style.display=\"none\",De.appendChild(e),e.src=String(\"javascript:\"),(t=e.contentWindow.document).open(),t.write(ze(\"document.F=Object\")),t.close(),t.F}()||Ne(Te);for(var t=Pt.length;t--;)delete Ae.prototype[Pt[t]];return Ae()};St[Ie]=!0;var Fe=Object.create||function(t,e){var i;return null!==t?(Be.prototype=dt(t),i=new Be,Be.prototype=null,i[Ie]=t):i=Ae(),void 0===e?i:Pe(i,e)},je={};je[U(\"toStringTag\")]=\"z\";var Re=\"[object z]\"===String(je),Le=U(\"toStringTag\"),He=\"Arguments\"==v(function(){return arguments}()),We=Re?v:function(t){var e,i,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Le))?i:He?v(e):\"Object\"==(n=v(e))&&\"function\"==typeof e.callee?\"Arguments\":n},qe=Re?{}.toString:function(){return\"[object \"+We(this)+\"]\"},Ve=ut.f,Ue=U(\"toStringTag\"),Ye=function(t,e,i,n){if(t){var o=i?t:t.prototype;j(o,Ue)||Ve(o,Ue,{configurable:!0,value:e}),n&&!Re&&ft(o,\"toString\",qe)}},Xe={},Ge=Me.IteratorPrototype,Ke=function(){return this},$e=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return dt(i),function(t){if(!w(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\")}(n),e?t.call(i,n):i.__proto__=n,i}}():void 0),Ze=function(t,e,i,n){n&&n.enumerable?t[e]=i:ft(t,e,i)},Qe=Me.IteratorPrototype,Je=Me.BUGGY_SAFARI_ITERATORS,ti=U(\"iterator\"),ei=\"keys\",ii=\"values\",ni=\"entries\",oi=function(){return this},ri=function(t,e,i,n,o,r,s){!function(t,e,i){var n=e+\" Iterator\";t.prototype=Fe(Ge,{next:f(1,i)}),Ye(t,n,!1,!0),Xe[n]=Ke}(i,e,n);var a,h,l,d=function(t){if(t===o&&g)return g;if(!Je&&t in p)return p[t];switch(t){case ei:case ii:case ni:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+\" Iterator\",u=!1,p=t.prototype,v=p[ti]||p[\"@@iterator\"]||o&&p[o],g=!Je&&v||d(o),y=\"Array\"==e&&p.entries||v;if(y&&(a=Ee(y.call(new t)),Qe!==Object.prototype&&a.next&&(Ye(a,c,!0,!0),Xe[c]=oi)),o==ii&&v&&v.name!==ii&&(u=!0,g=function(){return v.call(this)}),s&&p[ti]!==g&&ft(p,ti,g),Xe[e]=g,o)if(h={values:d(ii),keys:r?g:d(ei),entries:d(ni)},s)for(l in h)(Je||u||!(l in p))&&Ze(p,l,h[l]);else gt({target:e,proto:!0,forced:Je||u},h);return h},si=te.charAt,ai=\"String Iterator\",hi=we.set,li=we.getterFor(ai);ri(String,\"String\",(function(t){hi(this,{type:ai,string:Qt(t),index:0})}),(function(){var t,e=li(this),i=e.string,n=e.index;return n>=i.length?{value:void 0,done:!0}:(t=si(i,n),e.index+=t.length,{value:t,done:!1})}));var di=function(t){var e=t.return;if(void 0!==e)return dt(e.call(t)).value},ci=function(t,e,i,n){try{return n?e(dt(i)[0],i[1]):e(i)}catch(e){throw di(t),e}},ui=U(\"iterator\"),fi=Array.prototype,pi=function(t){return void 0!==t&&(Xe.Array===t||fi[ui]===t)},vi=function(t,e,i){var n=G(e);n in t?ut.f(t,n,f(0,i)):t[n]=i},gi=U(\"iterator\"),yi=function(t){if(null!=t)return t[gi]||t[\"@@iterator\"]||Xe[We(t)]},mi=U(\"iterator\"),bi=!1;try{var wi=0,ki={next:function(){return{done:!!wi++}},return:function(){bi=!0}};ki[mi]=function(){return this},Array.from(ki,(function(){throw 2}))}catch(t){}var _i=!function(t,e){if(!e&&!bi)return!1;var i=!1;try{var n={};n[mi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}((function(t){Array.from(t)}));gt({target:\"Array\",stat:!0,forced:_i},{from:function(t){var e,i,n,o,r,s,a=A(t),h=\"function\"==typeof this?this:Array,l=arguments.length,d=l>1?arguments[1]:void 0,c=void 0!==d,u=yi(a),f=0;if(c&&(d=lt(d,l>2?arguments[2]:void 0,2)),null==u||h==Array&&pi(u))for(i=new h(e=kt(a.length));e>f;f++)s=c?d(a[f],f):a[f],vi(i,f,s);else for(r=(o=u.call(a)).next,i=new h;!(n=r.call(o)).done;f++)s=c?ci(o,d,[n.value,f],!0):n.value,vi(i,f,s);return i.length=f,i}});var xi=k.Array.from,Ei=xi,Oi=\"Array Iterator\",Ci=we.set,Si=we.getterFor(Oi);ri(Array,\"Array\",(function(t,e){Ci(this,{type:Oi,target:b(t),index:0,kind:e})}),(function(){var t=Si(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):\"keys\"==i?{value:n,done:!1}:\"values\"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),\"values\"),Xe.Arguments=Xe.Array;var Ti=yi,Mi=U(\"toStringTag\");for(var Pi in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Di=a[Pi],Ii=Di&&Di.prototype;Ii&&We(Ii)!==Mi&&ft(Ii,Mi,Pi),Xe[Pi]=Xe.Array}var Bi=Ti,zi=Array.isArray||function(t){return\"Array\"==v(t)},Ni=Pt.concat(\"length\",\"prototype\"),Ai={f:Object.getOwnPropertyNames||function(t){return Mt(t,Ni)}},Fi=Ai.f,ji={}.toString,Ri=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Li={f:function(t){return Ri&&\"[object Window]\"==ji.call(t)?function(t){try{return Fi(t)}catch(t){return Ri.slice()}}(t):Fi(b(t))}},Hi={f:U},Wi=ut.f,qi=function(t){var e=k.Symbol||(k.Symbol={});j(e,t)||Wi(e,t,{value:Hi.f(t)})},Vi=U(\"species\"),Ui=function(t,e){return new(function(t){var e;return zi(t)&&(\"function\"!=typeof(e=t.constructor)||e!==Array&&!zi(e.prototype)?w(e)&&null===(e=e[Vi])&&(e=void 0):e=void 0),void 0===e?Array:e}(t))(0===e?0:e)},Yi=[].push,Xi=function(t){var e=1==t,i=2==t,n=3==t,o=4==t,r=6==t,s=7==t,a=5==t||r;return function(h,l,d,c){for(var u,f,p=A(h),v=y(p),g=lt(l,d,3),m=kt(v.length),b=0,w=c||Ui,k=e?w(h,m):i||s?w(h,0):void 0;m>b;b++)if((a||b in v)&&(f=g(u=v[b],b,p),t))if(e)k[b]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Yi.call(k,u)}else switch(t){case 4:return!1;case 7:Yi.call(k,u)}return r?-1:n||o?o:k}},Gi={forEach:Xi(0),map:Xi(1),filter:Xi(2),some:Xi(3),every:Xi(4),find:Xi(5),findIndex:Xi(6),filterReject:Xi(7)},Ki=Gi.forEach,$i=le(\"hidden\"),Zi=\"Symbol\",Qi=U(\"toPrimitive\"),Ji=we.set,tn=we.getterFor(Zi),en=Object.prototype,nn=a.Symbol,on=x(\"JSON\",\"stringify\"),rn=tt.f,sn=ut.f,an=Li.f,hn=u.f,ln=N(\"symbols\"),dn=N(\"op-symbols\"),cn=N(\"string-to-symbol-registry\"),un=N(\"symbol-to-string-registry\"),fn=N(\"wks\"),pn=a.QObject,vn=!pn||!pn.prototype||!pn.prototype.findChild,gn=l&&h((function(){return 7!=Fe(sn({},\"a\",{get:function(){return sn(this,\"a\",{value:7}).a}})).a}))?function(t,e,i){var n=rn(en,e);n&&delete en[e],sn(t,e,i),n&&t!==en&&sn(en,e,n)}:sn,yn=function(t,e){var i=ln[t]=Fe(nn.prototype);return Ji(i,{type:Zi,tag:t,description:e}),l||(i.description=e),i},mn=function(t,e,i){t===en&&mn(dn,e,i),dt(t);var n=G(e);return dt(i),j(ln,n)?(i.enumerable?(j(t,$i)&&t[$i][n]&&(t[$i][n]=!1),i=Fe(i,{enumerable:f(0,!1)})):(j(t,$i)||sn(t,$i,f(1,{})),t[$i][n]=!0),gn(t,n,i)):sn(t,n,i)},bn=function(t,e){dt(t);var i=b(e),n=Dt(i).concat(xn(i));return Ki(n,(function(e){l&&!wn.call(i,e)||mn(t,e,i[e])})),t},wn=function(t){var e=G(t),i=hn.call(this,e);return!(this===en&&j(ln,e)&&!j(dn,e))&&(!(i||!j(this,e)||!j(ln,e)||j(this,$i)&&this[$i][e])||i)},kn=function(t,e){var i=b(t),n=G(e);if(i!==en||!j(ln,n)||j(dn,n)){var o=rn(i,n);return!o||!j(ln,n)||j(i,$i)&&i[$i][n]||(o.enumerable=!0),o}},_n=function(t){var e=an(b(t)),i=[];return Ki(e,(function(t){j(ln,t)||j(St,t)||i.push(t)})),i},xn=function(t){var e=t===en,i=an(e?dn:b(t)),n=[];return Ki(i,(function(t){!j(ln,t)||e&&!j(en,t)||n.push(ln[t])})),n};if(P||(Ze((nn=function(){if(this instanceof nn)throw TypeError(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?Qt(arguments[0]):void 0,e=H(t),i=function(t){this===en&&i.call(dn,t),j(this,$i)&&j(this[$i],e)&&(this[$i][e]=!1),gn(this,e,f(1,t))};return l&&vn&&gn(en,e,{configurable:!0,set:i}),yn(e,t)}).prototype,\"toString\",(function(){return tn(this).tag})),Ze(nn,\"withoutSetter\",(function(t){return yn(H(t),t)})),u.f=wn,ut.f=mn,tt.f=kn,Ai.f=Li.f=_n,It.f=xn,Hi.f=function(t){return yn(U(t),t)},l&&sn(nn.prototype,\"description\",{configurable:!0,get:function(){return tn(this).description}})),gt({global:!0,wrap:!0,forced:!P,sham:!P},{Symbol:nn}),Ki(Dt(fn),(function(t){qi(t)})),gt({target:Zi,stat:!0,forced:!P},{for:function(t){var e=Qt(t);if(j(cn,e))return cn[e];var i=nn(e);return cn[e]=i,un[i]=e,i},keyFor:function(t){if(!I(t))throw TypeError(t+\" is not a symbol\");if(j(un,t))return un[t]},useSetter:function(){vn=!0},useSimple:function(){vn=!1}}),gt({target:\"Object\",stat:!0,forced:!P,sham:!l},{create:function(t,e){return void 0===e?Fe(t):bn(Fe(t),e)},defineProperty:mn,defineProperties:bn,getOwnPropertyDescriptor:kn}),gt({target:\"Object\",stat:!0,forced:!P},{getOwnPropertyNames:_n,getOwnPropertySymbols:xn}),gt({target:\"Object\",stat:!0,forced:h((function(){It.f(1)}))},{getOwnPropertySymbols:function(t){return It.f(A(t))}}),on){var En=!P||h((function(){var t=nn();return\"[null]\"!=on([t])||\"{}\"!=on({a:t})||\"{}\"!=on(Object(t))}));gt({target:\"JSON\",stat:!0,forced:En},{stringify:function(t,e,i){for(var n,o=[t],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=e,(w(e)||void 0!==t)&&!I(t))return zi(e)||(e=function(t,e){if(\"function\"==typeof n&&(e=n.call(this,t,e)),!I(e))return e}),o[1]=e,on.apply(null,o)}})}nn.prototype[Qi]||ft(nn.prototype,Qi,nn.prototype.valueOf),Ye(nn,Zi),St[$i]=!0;var On=k.Object.getOwnPropertySymbols,Cn=tt.f,Sn=h((function(){Cn(1)}));gt({target:\"Object\",stat:!0,forced:!l||Sn,sham:!l},{getOwnPropertyDescriptor:function(t,e){return Cn(b(t),e)}});var Tn=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.getOwnPropertyDescriptor(t,i)};e.getOwnPropertyDescriptor.sham&&(i.sham=!0)})),Mn=Tn,Pn=x(\"Reflect\",\"ownKeys\")||function(t){var e=Ai.f(dt(t)),i=It.f;return i?e.concat(i(t)):e};gt({target:\"Object\",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(t){for(var e,i,n=b(t),o=tt.f,r=Pn(n),s={},a=0;r.length>a;)void 0!==(i=o(n,e=r[a++]))&&vi(s,e,i);return s}});var Dn=k.Object.getOwnPropertyDescriptors;gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperties:Pe});var In=n((function(t){var e=k.Object,i=t.exports=function(t,i){return e.defineProperties(t,i)};e.defineProperties.sham&&(i.sham=!0)}));gt({target:\"Object\",stat:!0,forced:!l,sham:!l},{defineProperty:ut.f});var Bn=n((function(t){var e=k.Object,i=t.exports=function(t,i,n){return e.defineProperty(t,i,n)};e.defineProperty.sham&&(i.sham=!0)})),zn=Bn,Nn=i(n((function(t){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")},t.exports.default=t.exports,t.exports.__esModule=!0}))),An=Bn,Fn=i(n((function(t){function e(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),An(t,n.key,n)}}t.exports=function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t},t.exports.default=t.exports,t.exports.__esModule=!0}))),jn=i(n((function(t){t.exports=function(t,e,i){return e in t?An(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t},t.exports.default=t.exports,t.exports.__esModule=!0})));gt({target:\"Array\",stat:!0},{isArray:zi});var Rn=k.Array.isArray,Ln=Rn,Hn=n((function(t){t.exports=function(t){if(Ln(t))return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Hn);var Wn=U(\"species\"),qn=function(t){return M>=51||!h((function(){var e=[];return(e.constructor={})[Wn]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Vn=U(\"isConcatSpreadable\"),Un=9007199254740991,Yn=\"Maximum allowed index exceeded\",Xn=M>=51||!h((function(){var t=[];return t[Vn]=!1,t.concat()[0]!==t})),Gn=qn(\"concat\"),Kn=function(t){if(!w(t))return!1;var e=t[Vn];return void 0!==e?!!e:zi(t)};gt({target:\"Array\",proto:!0,forced:!Xn||!Gn},{concat:function(t){var e,i,n,o,r,s=A(this),a=Ui(s,0),h=0;for(e=-1,n=arguments.length;e<n;e++)if(Kn(r=-1===e?s:arguments[e])){if(h+(o=kt(r.length))>Un)throw TypeError(Yn);for(i=0;i<o;i++,h++)i in r&&vi(a,h,r[i])}else{if(h>=Un)throw TypeError(Yn);vi(a,h++,r)}return a.length=h,a}}),qi(\"asyncIterator\"),qi(\"hasInstance\"),qi(\"isConcatSpreadable\"),qi(\"iterator\"),qi(\"match\"),qi(\"matchAll\"),qi(\"replace\"),qi(\"search\"),qi(\"species\"),qi(\"split\"),qi(\"toPrimitive\"),qi(\"toStringTag\"),qi(\"unscopables\"),Ye(a.JSON,\"JSON\",!0);var $n=k.Symbol;qi(\"asyncDispose\"),qi(\"dispose\"),qi(\"matcher\"),qi(\"metadata\"),qi(\"observable\"),qi(\"patternMatch\"),qi(\"replaceAll\");var Zn=$n,Qn=n((function(t){t.exports=function(t,e){var i=null==t?null:void 0!==Zn&&Bi(t)||t[\"@@iterator\"];if(null!=i){var n,o,r=[],s=!0,a=!1;try{for(i=i.call(t);!(s=(n=i.next()).done)&&(r.push(n.value),!e||r.length!==e);s=!0);}catch(t){a=!0,o=t}finally{try{s||null==i.return||i.return()}finally{if(a)throw o}}return r}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(Qn);var Jn=qn(\"slice\"),to=U(\"species\"),eo=[].slice,io=Math.max;gt({target:\"Array\",proto:!0,forced:!Jn},{slice:function(t,e){var i,n,o,r=b(this),s=kt(r.length),a=Et(t,s),h=Et(void 0===e?s:e,s);if(zi(r)&&(\"function\"!=typeof(i=r.constructor)||i!==Array&&!zi(i.prototype)?w(i)&&null===(i=i[to])&&(i=void 0):i=void 0,i===Array||void 0===i))return eo.call(r,a,h);for(n=new(void 0===i?Array:i)(io(h-a,0)),o=0;a<h;a++,o++)a in r&&vi(n,o,r[a]);return n.length=o,n}});var no=Ht(\"Array\").slice,oo=Array.prototype,ro=function(t){var e=t.slice;return t===oo||t instanceof Array&&e===oo.slice?no:e},so=ro,ao=xi,ho=n((function(t){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n},t.exports.default=t.exports,t.exports.__esModule=!0}));i(ho);var lo=n((function(t){t.exports=function(t,e){var i;if(t){if(\"string\"==typeof t)return ho(t,e);var n=so(i=Object.prototype.toString.call(t)).call(i,8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?ao(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ho(t,e):void 0}},t.exports.default=t.exports,t.exports.__esModule=!0}));i(lo);var co=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(co);var uo=i(n((function(t){t.exports=function(t,e){return Hn(t)||Qn(t,e)||lo(t,e)||co()},t.exports.default=t.exports,t.exports.__esModule=!0}))),fo=Hi.f(\"iterator\"),po=fo,vo=n((function(t){function e(i){return\"function\"==typeof Zn&&\"symbol\"==typeof po?(t.exports=e=function(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t){return t&&\"function\"==typeof Zn&&t.constructor===Zn&&t!==Zn.prototype?\"symbol\":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),go=i(vo),yo=n((function(t){t.exports=function(t){if(Ln(t))return ho(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yo);var mo=n((function(t){t.exports=function(t){if(void 0!==Zn&&null!=Bi(t)||null!=t[\"@@iterator\"])return ao(t)},t.exports.default=t.exports,t.exports.__esModule=!0}));i(mo);var bo=n((function(t){t.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")},t.exports.default=t.exports,t.exports.__esModule=!0}));i(bo);var wo=i(n((function(t){t.exports=function(t){return yo(t)||mo(t)||lo(t)||bo()},t.exports.default=t.exports,t.exports.__esModule=!0}))),ko=$n,_o=Ht(\"Array\").concat,xo=Array.prototype,Eo=function(t){var e=t.concat;return t===xo||t instanceof Array&&e===xo.concat?_o:e},Oo=ro;gt({target:\"Reflect\",stat:!0},{ownKeys:Pn});var Co=k.Reflect.ownKeys,So=Rn,To=Gi.map,Mo=qn(\"map\");gt({target:\"Array\",proto:!0,forced:!Mo},{map:function(t){return To(this,t,arguments.length>1?arguments[1]:void 0)}});var Po=Ht(\"Array\").map,Do=Array.prototype,Io=function(t){var e=t.map;return t===Do||t instanceof Array&&e===Do.map?Po:e},Bo=h((function(){Dt(1)}));gt({target:\"Object\",stat:!0,forced:Bo},{keys:function(t){return Dt(A(t))}});var zo=k.Object.keys;gt({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}});var No=k.Date.now,Ao=function(t,e){var i=[][t];return!!i&&h((function(){i.call(null,e||function(){throw 1},1)}))},Fo=Gi.forEach,jo=Ao(\"forEach\")?[].forEach:function(t){return Fo(this,t,arguments.length>1?arguments[1]:void 0)};gt({target:\"Array\",proto:!0,forced:[].forEach!=jo},{forEach:jo});var Ro=Ht(\"Array\").forEach,Lo=Array.prototype,Ho={DOMTokenList:!0,NodeList:!0},Wo=function(t){var e=t.forEach;return t===Lo||t instanceof Array&&e===Lo.forEach||Ho.hasOwnProperty(We(t))?Ro:e},qo=[].reverse,Vo=[1,2];gt({target:\"Array\",proto:!0,forced:String(Vo)===String(Vo.reverse())},{reverse:function(){return zi(this)&&(this.length=this.length),qo.call(this)}});var Uo=Ht(\"Array\").reverse,Yo=Array.prototype,Xo=function(t){var e=t.reverse;return t===Yo||t instanceof Array&&e===Yo.reverse?Uo:e},Go=qn(\"splice\"),Ko=Math.max,$o=Math.min,Zo=9007199254740991,Qo=\"Maximum allowed length exceeded\";gt({target:\"Array\",proto:!0,forced:!Go},{splice:function(t,e){var i,n,o,r,s,a,h=A(this),l=kt(h.length),d=Et(t,l),c=arguments.length;if(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=$o(Ko(bt(e),0),l-d)),l+i-n>Zo)throw TypeError(Qo);for(o=Ui(h,n),r=0;r<n;r++)(s=d+r)in h&&vi(o,r,h[s]);if(o.length=n,i<n){for(r=d;r<l-n;r++)a=r+i,(s=r+n)in h?h[a]=h[s]:delete h[a];for(r=l;r>l-n+i;r--)delete h[r-1]}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:delete h[a];for(r=0;r<i;r++)h[r+d]=arguments[r+2];return h.length=l-n+i,o}});var Jo=Ht(\"Array\").splice,tr=Array.prototype,er=function(t){var e=t.splice;return t===tr||t instanceof Array&&e===tr.splice?Jo:e},ir=Ct.includes;gt({target:\"Array\",proto:!0},{includes:function(t){return ir(this,t,arguments.length>1?arguments[1]:void 0)}});var nr=Ht(\"Array\").includes,or=U(\"match\"),rr=function(t){if(function(t){var e;return w(t)&&(void 0!==(e=t[or])?!!e:\"RegExp\"==v(t))}(t))throw TypeError(\"The method doesn't accept regular expressions\");return t},sr=U(\"match\");gt({target:\"String\",proto:!0,forced:!function(t){var e=/./;try{\"/./\"[t](e)}catch(i){try{return e[sr]=!1,\"/./\"[t](e)}catch(t){}}return!1}(\"includes\")},{includes:function(t){return!!~Qt(m(this)).indexOf(Qt(rr(t)),arguments.length>1?arguments[1]:void 0)}});var ar=Ht(\"String\").includes,hr=Array.prototype,lr=String.prototype,dr=function(t){var e=t.includes;return t===hr||t instanceof Array&&e===hr.includes?nr:\"string\"==typeof t||t===lr||t instanceof String&&e===lr.includes?ar:e},cr=h((function(){Ee(1)}));gt({target:\"Object\",stat:!0,forced:cr,sham:!ke},{getPrototypeOf:function(t){return Ee(A(t))}});var ur=k.Object.getPrototypeOf,fr=ur,pr=Gi.filter,vr=qn(\"filter\");gt({target:\"Array\",proto:!0,forced:!vr},{filter:function(t){return pr(this,t,arguments.length>1?arguments[1]:void 0)}});var gr=Ht(\"Array\").filter,yr=Array.prototype,mr=function(t){var e=t.filter;return t===yr||t instanceof Array&&e===yr.filter?gr:e},br=u.f,wr=function(t){return function(e){for(var i,n=b(e),o=Dt(n),r=o.length,s=0,a=[];r>s;)i=o[s++],l&&!br.call(n,i)||a.push(t?[i,n[i]]:n[i]);return a}},kr={entries:wr(!0),values:wr(!1)}.values;gt({target:\"Object\",stat:!0},{values:function(t){return kr(t)}});var _r=k.Object.values,xr=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\",Er=\"[\"+xr+\"]\",Or=RegExp(\"^\"+Er+Er+\"*\"),Cr=RegExp(Er+Er+\"*$\"),Sr=function(t){return function(e){var i=Qt(m(e));return 1&t&&(i=i.replace(Or,\"\")),2&t&&(i=i.replace(Cr,\"\")),i}},Tr={start:Sr(1),end:Sr(2),trim:Sr(3)},Mr=Tr.trim,Pr=a.parseInt,Dr=/^[+-]?0[Xx]/,Ir=8!==Pr(xr+\"08\")||22!==Pr(xr+\"0x16\")?function(t,e){var i=Mr(Qt(t));return Pr(i,e>>>0||(Dr.test(i)?16:10))}:Pr;gt({global:!0,forced:parseInt!=Ir},{parseInt:Ir});var Br=k.parseInt,zr=Ct.indexOf,Nr=[].indexOf,Ar=!!Nr&&1/[1].indexOf(1,-0)<0,Fr=Ao(\"indexOf\");gt({target:\"Array\",proto:!0,forced:Ar||!Fr},{indexOf:function(t){return Ar?Nr.apply(this,arguments)||0:zr(this,t,arguments.length>1?arguments[1]:void 0)}});var jr,Rr=Ht(\"Array\").indexOf,Lr=Array.prototype,Hr=function(t){var e=t.indexOf;return t===Lr||t instanceof Array&&e===Lr.indexOf?Rr:e},Wr=Tr.trim;gt({target:\"String\",proto:!0,forced:(jr=\"trim\",h((function(){return!!xr[jr]()||\"​\\n᠎\"!=\"​\\n᠎\"[jr]()||xr[jr].name!==jr})))},{trim:function(){return Wr(this)}});var qr=Ht(\"String\").trim,Vr=String.prototype,Ur=function(t){var e=t.trim;return\"string\"==typeof t||t===Vr||t instanceof String&&e===Vr.trim?qr:e};gt({target:\"Object\",stat:!0,sham:!l},{create:Fe});var Yr=k.Object,Xr=function(t,e){return Yr.create(t,e)},Gr=Xr,Kr=x(\"JSON\",\"stringify\"),$r=/[\\uD800-\\uDFFF]/g,Zr=/^[\\uD800-\\uDBFF]$/,Qr=/^[\\uDC00-\\uDFFF]$/,Jr=function(t,e,i){var n=i.charAt(e-1),o=i.charAt(e+1);return Zr.test(t)&&!Qr.test(o)||Qr.test(t)&&!Zr.test(n)?\"\\\\u\"+t.charCodeAt(0).toString(16):t},ts=h((function(){return'\"\\\\udf06\\\\ud834\"'!==Kr(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==Kr(\"\\udead\")}));Kr&&gt({target:\"JSON\",stat:!0,forced:ts},{stringify:function(t,e,i){var n=Kr.apply(null,arguments);return\"string\"==typeof n?n.replace($r,Jr):n}}),k.JSON||(k.JSON={stringify:JSON.stringify});var es=function(t,e,i){return k.JSON.stringify.apply(null,arguments)},is=[].slice,ns=/MSIE .\\./.test(E),os=function(t){return function(e,i){var n=arguments.length>2,o=n?is.call(arguments,2):void 0;return t(n?function(){(\"function\"==typeof e?e:Function(e)).apply(this,o)}:e,i)}};gt({global:!0,bind:!0,forced:ns},{setTimeout:os(a.setTimeout),setInterval:os(a.setInterval)});var rs=k.setTimeout;gt({target:\"Array\",proto:!0},{fill:function(t){for(var e=A(this),i=kt(e.length),n=arguments.length,o=Et(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Et(r,i);s>o;)e[o++]=t;return e}});var ss=Ht(\"Array\").fill,as=Array.prototype,hs=function(t){var e=t.fill;return t===as||t instanceof Array&&e===as.fill?ss:e};function ls(){return(ls=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function ds(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}function cs(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}var us,fs=\"function\"!=typeof Object.assign?function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var n=arguments[i];if(null!=n)for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e}:Object.assign,ps=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],vs=\"undefined\"==typeof document?{style:{}}:document.createElement(\"div\"),gs=Math.round,ys=Math.abs,ms=Date.now;function bs(t,e){for(var i,n,o=e[0].toUpperCase()+e.slice(1),r=0;r<ps.length;){if((n=(i=ps[r])?i+o:e)in t)return n;r++}}us=\"undefined\"==typeof window?{}:window;var ws=bs(vs.style,\"touchAction\"),ks=void 0!==ws;var _s=\"compute\",xs=\"auto\",Es=\"manipulation\",Os=\"none\",Cs=\"pan-x\",Ss=\"pan-y\",Ts=function(){if(!ks)return!1;var t={},e=us.CSS&&us.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(i){return t[i]=!e||us.CSS.supports(\"touch-action\",i)})),t}(),Ms=\"ontouchstart\"in us,Ps=void 0!==bs(us,\"PointerEvent\"),Ds=Ms&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),Is=\"touch\",Bs=\"mouse\",zs=16,Ns=24,As=[\"x\",\"y\"],Fs=[\"clientX\",\"clientY\"];function js(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(void 0!==t.length)for(n=0;n<t.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)&&e.call(i,t[n],n,t)}function Rs(t,e){return\"function\"==typeof t?t.apply(e&&e[0]||void 0,e):t}function Ls(t,e){return t.indexOf(e)>-1}var Hs=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===_s&&(t=this.compute()),ks&&this.manager.element.style&&Ts[t]&&(this.manager.element.style[ws]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return js(this.manager.recognizers,(function(e){Rs(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ls(t,Os))return Os;var e=Ls(t,Cs),i=Ls(t,Ss);return e&&i?Os:e||i?e?Cs:Ss:Ls(t,Es)?Es:xs}(t.join(\" \"))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ls(n,Os)&&!Ts.none,r=Ls(n,Ss)&&!Ts[\"pan-y\"],s=Ls(n,Cs)&&!Ts[\"pan-x\"];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&6&i||s&&i&Ns?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ws(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function qs(t){var e=t.length;if(1===e)return{x:gs(t[0].clientX),y:gs(t[0].clientY)};for(var i=0,n=0,o=0;o<e;)i+=t[o].clientX,n+=t[o].clientY,o++;return{x:gs(i/e),y:gs(n/e)}}function Vs(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:gs(t.pointers[i].clientX),clientY:gs(t.pointers[i].clientY)},i++;return{timeStamp:ms(),pointers:e,center:qs(e),deltaX:t.deltaX,deltaY:t.deltaY}}function Us(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(n*n+o*o)}function Ys(t,e,i){i||(i=As);var n=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,n)/Math.PI}function Xs(t,e){return t===e?1:ys(t)>=ys(e)?t<0?2:4:e<0?8:zs}function Gs(t,e,i){return{x:e/t||0,y:i/t||0}}function Ks(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Vs(e)),o>1&&!i.firstMultiple?i.firstMultiple=Vs(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=qs(n);e.timeStamp=ms(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=Ys(a,h),e.distance=Us(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};1!==e.eventType&&4!==r.eventType||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Xs(e.deltaX,e.deltaY);var l,d,c=Gs(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=ys(c.x)>ys(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Us((d=n)[0],d[1],Fs)/Us(l[0],l[1],Fs)):1,e.rotation=s?function(t,e){return Ys(e[1],e[0],Fs)+Ys(t[1],t[0],Fs)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(8!==e.eventType&&(a>25||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Gs(a,h,l);n=d.x,o=d.y,i=ys(d.x)>ys(d.y)?d.x:d.y,r=Xs(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ws(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function $s(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=1&e&&n-o==0,s=12&e&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Ks(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput=i}function Zs(t){return t.trim().split(/\\s+/g)}function Qs(t,e,i){js(Zs(e),(function(e){t.addEventListener(e,i,!1)}))}function Js(t,e,i){js(Zs(e),(function(e){t.removeEventListener(e,i,!1)}))}function ta(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var ea=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){Rs(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Qs(this.element,this.evEl,this.domHandler),this.evTarget&&Qs(this.target,this.evTarget,this.domHandler),this.evWin&&Qs(ta(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&Js(this.element,this.evEl,this.domHandler),this.evTarget&&Js(this.target,this.evTarget,this.domHandler),this.evWin&&Js(ta(this.element),this.evWin,this.domHandler)},t}();function ia(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;n<t.length;){if(i&&t[n][i]==e||!i&&t[n]===e)return n;n++}return-1}var na={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},oa={2:Is,3:\"pen\",4:Bs,5:\"kinect\"},ra=\"pointerdown\",sa=\"pointermove pointerup pointercancel\";us.MSPointerEvent&&!us.PointerEvent&&(ra=\"MSPointerDown\",sa=\"MSPointerMove MSPointerUp MSPointerCancel\");var aa=function(t){function e(){var i,n=e.prototype;return n.evEl=ra,n.evWin=sa,(i=t.apply(this,arguments)||this).store=i.manager.session.pointerEvents=[],i}return ds(e,t),e.prototype.handler=function(t){var e=this.store,i=!1,n=t.type.toLowerCase().replace(\"ms\",\"\"),o=na[n],r=oa[t.pointerType]||t.pointerType,s=r===Is,a=ia(e,t.pointerId,\"pointerId\");1&o&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):12&o&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),i&&e.splice(a,1))},e}(ea);function ha(t){return Array.prototype.slice.call(t,0)}function la(t,e,i){for(var n=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];ia(o,s)<0&&n.push(t[r]),o[r]=s,r++}return i&&(n=e?n.sort((function(t,i){return t[e]>i[e]})):n.sort()),n}var da={touchstart:1,touchmove:2,touchend:4,touchcancel:8},ca=\"touchstart touchmove touchend touchcancel\",ua=function(t){function e(){var i;return e.prototype.evTarget=ca,(i=t.apply(this,arguments)||this).targetIds={},i}return ds(e,t),e.prototype.handler=function(t){var e=da[t.type],i=fa.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})},e}(ea);function fa(t,e){var i,n,o=ha(t.touches),r=this.targetIds;if(3&e&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=ha(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ws(t.target,h)})),1===e)for(i=0;i<n.length;)r[n[i].identifier]=!0,i++;for(i=0;i<s.length;)r[s[i].identifier]&&a.push(s[i]),12&e&&delete r[s[i].identifier],i++;return a.length?[la(n.concat(a),\"identifier\",!0),a]:void 0}var pa={mousedown:1,mousemove:2,mouseup:4},va=\"mousedown\",ga=\"mousemove mouseup\",ya=function(t){function e(){var i,n=e.prototype;return n.evEl=va,n.evWin=ga,(i=t.apply(this,arguments)||this).pressed=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=pa[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:Bs,srcEvent:t}))},e}(ea);function ma(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY},n=this.lastTouches;this.lastTouches.push(i);setTimeout((function(){var t=n.indexOf(i);t>-1&&n.splice(t,1)}),2500)}}function ba(t,e){1&t?(this.primaryTouch=e.changedPointers[0].identifier,ma.call(this,e)):12&t&&ma.call(this,e)}function wa(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],r=Math.abs(e-o.x),s=Math.abs(i-o.y);if(r<=25&&s<=25)return!0}return!1}var ka=function(){return function(t){function e(e,i){var n;return(n=t.call(this,e,i)||this).handler=function(t,e,i){var o=i.pointerType===Is,r=i.pointerType===Bs;if(!(r&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)ba.call(cs(cs(n)),e,i);else if(r&&wa.call(cs(cs(n)),i))return;n.callback(t,e,i)}},n.touch=new ua(n.manager,n.handler),n.mouse=new ya(n.manager,n.handler),n.primaryTouch=null,n.lastTouches=[],n}return ds(e,t),e.prototype.destroy=function(){this.touch.destroy(),this.mouse.destroy()},e}(ea)}();function _a(t,e,i){return!!Array.isArray(t)&&(js(t,i[e],i),!0)}var xa=32,Ea=1;function Oa(t,e){var i=e.manager;return i?i.get(t):t}function Ca(t){return 16&t?\"cancel\":8&t?\"end\":4&t?\"move\":2&t?\"start\":\"\"}var Sa=function(){function t(t){void 0===t&&(t={}),this.options=ls({enable:!0},t),this.id=Ea++,this.manager=null,this.state=1,this.simultaneous={},this.requireFail=[]}var e=t.prototype;return e.set=function(t){return fs(this.options,t),this.manager&&this.manager.touchAction.update(),this},e.recognizeWith=function(t){if(_a(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return e[(t=Oa(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},e.dropRecognizeWith=function(t){return _a(t,\"dropRecognizeWith\",this)||(t=Oa(t,this),delete this.simultaneous[t.id]),this},e.requireFailure=function(t){if(_a(t,\"requireFailure\",this))return this;var e=this.requireFail;return-1===ia(e,t=Oa(t,this))&&(e.push(t),t.requireFailure(this)),this},e.dropRequireFailure=function(t){if(_a(t,\"dropRequireFailure\",this))return this;t=Oa(t,this);var e=ia(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+Ca(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+Ca(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=xa},e.canEmit=function(){for(var t=0;t<this.requireFail.length;){if(!(33&this.requireFail[t].state))return!1;t++}return!0},e.recognize=function(t){var e=fs({},t);if(!Rs(this.options.enable,[this,e]))return this.reset(),void(this.state=xa);56&this.state&&(this.state=1),this.state=this.process(e),30&this.state&&this.tryEmit(e)},e.process=function(t){},e.getTouchAction=function(){},e.reset=function(){},t}(),Ta=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},e))||this).pTime=!1,i.pCenter=!1,i._timer=null,i._input=null,i.count=0,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Es]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime<i.time;if(this.reset(),1&t.eventType&&0===this.count)return this.failTimeout();if(o&&r&&n){if(4!==t.eventType)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<i.interval,a=!this.pCenter||Us(this.pCenter,t.center)<i.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t,0===this.count%i.taps)return this.hasRequireFailures()?(this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.interval),2):8}return xa},i.failTimeout=function(){var t=this;return this._timer=setTimeout((function(){t.state=xa}),this.options.interval),xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(){8===this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))},e}(Sa),Ma=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.attrTest=function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},i.process=function(t){var e=this.state,i=t.eventType,n=6&e,o=this.attrTest(t);return n&&(8&i||!o)?16|e:n||o?4&i?8|e:2&e?4|e:2:xa},e}(Sa);function Pa(t){return t===zs?\"down\":8===t?\"up\":2===t?\"left\":4===t?\"right\":\"\"}var Da=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"pan\",threshold:10,pointers:1,direction:30},e))||this).pX=null,i.pY=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){var t=this.options.direction,e=[];return 6&t&&e.push(Ss),t&Ns&&e.push(Cs),e},i.directionTest=function(t){var e=this.options,i=!0,n=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(6&e.direction?(o=0===r?1:r<0?2:4,i=r!==this.pX,n=Math.abs(t.deltaX)):(o=0===s?1:s<0?8:zs,i=s!==this.pY,n=Math.abs(t.deltaY))),t.direction=o,i&&n>e.threshold&&o&e.direction},i.attrTest=function(t){return Ma.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Pa(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Ma),Ia=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return Da.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return 30&n?i=e.overallVelocity:6&n?i=e.overallVelocityX:n&Ns&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&ys(i)>this.options.velocity&&4&e.eventType},i.emit=function(t){var e=Pa(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Ma),Ba=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"pinch\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?\"in\":\"out\";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Ma),za=function(t){function e(e){return void 0===e&&(e={}),t.call(this,ls({event:\"rotate\",threshold:0,pointers:2},e))||this}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Os]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Ma),Na=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,ls({event:\"press\",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}ds(e,t);var i=e.prototype;return i.getTouchAction=function(){return[xs]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distance<i.threshold,r=t.deltaTime>i.time;if(this._input=t,!o||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(4&t.eventType)return 8;return xa},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=ms(),this.manager.emit(this.options.event,this._input)))},e}(Sa),Aa={domEvents:!1,touchAction:_s,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}},Fa=[[za,{enable:!1}],[Ba,{enable:!1},[\"rotate\"]],[Ia,{direction:6}],[Da,{direction:6},[\"swipe\"]],[Ta],[Ta,{event:\"doubletap\",taps:2},[\"tap\"]],[Na]];function ja(t,e){var i,n=t.element;n.style&&(js(t.options.cssProps,(function(o,r){i=bs(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||\"\"})),e||(t.oldCssProps={}))}var Ra=function(){function t(t,e){var i,n=this;this.options=fs({},Aa,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Ps?aa:Ds?ua:Ms?ka:ya))(i,$s),this.touchAction=new Hs(this,this.options.touchAction),ja(this,!0),js(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return fs(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r<n.length;)i=n[r],2===e.stopped||o&&i!==o&&!i.canRecognizeWith(o)?i.reset():i.recognize(t),!o&&14&i.state&&(e.curRecognizer=i,o=i),r++}},e.get=function(t){if(t instanceof Sa)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null},e.add=function(t){if(_a(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},e.remove=function(t){if(_a(t,\"remove\",this))return this;var e=this.get(t);if(t){var i=this.recognizers,n=ia(i,e);-1!==n&&(i.splice(n,1),this.touchAction.update())}return this},e.on=function(t,e){if(void 0===t||void 0===e)return this;var i=this.handlers;return js(Zs(t),(function(t){i[t]=i[t]||[],i[t].push(e)})),this},e.off=function(t,e){if(void 0===t)return this;var i=this.handlers;return js(Zs(t),(function(t){e?i[t]&&i[t].splice(ia(i[t],e),1):delete i[t]})),this},e.emit=function(t,e){this.options.domEvents&&function(t,e){var i=document.createEvent(\"Event\");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](e),n++}},e.destroy=function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null},t}(),La={touchstart:1,touchmove:2,touchend:4,touchcancel:8},Ha=\"touchstart\",Wa=\"touchstart touchmove touchend touchcancel\",qa=function(t){function e(){var i,n=e.prototype;return n.evTarget=Ha,n.evWin=Wa,(i=t.apply(this,arguments)||this).started=!1,i}return ds(e,t),e.prototype.handler=function(t){var e=La[t.type];if(1===e&&(this.started=!0),this.started){var i=Va.call(this,t,e);12&e&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Is,srcEvent:t})}},e}(ea);function Va(t,e){var i=ha(t.touches),n=ha(t.changedTouches);return 12&e&&(i=la(i.concat(n),\"identifier\",!0)),[i,n]}function Ua(t,e,i){var n=\"DEPRECATED METHOD: \"+e+\"\\n\"+i+\" AT \\n\";return function(){var e=new Error(\"get-stack-trace\"),i=e&&e.stack?e.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Ya=Ua((function(t,e,i){for(var n=Object.keys(e),o=0;o<n.length;)(!i||i&&void 0===t[n[o]])&&(t[n[o]]=e[n[o]]),o++;return t}),\"extend\",\"Use `assign`.\"),Xa=Ua((function(t,e){return Ya(t,e,!0)}),\"merge\",\"Use `assign`.\");function Ga(t,e,i){var n,o=e.prototype;(n=t.prototype=Object.create(o)).constructor=t,n._super=o,i&&fs(n,i)}function Ka(t,e){return function(){return t.apply(e,arguments)}}var $a=function(){var t=function(t,e){return void 0===e&&(e={}),new Ra(t,ls({recognizers:Fa.concat()},e))};return t.VERSION=\"2.0.17-rc\",t.DIRECTION_ALL=30,t.DIRECTION_DOWN=zs,t.DIRECTION_LEFT=2,t.DIRECTION_RIGHT=4,t.DIRECTION_UP=8,t.DIRECTION_HORIZONTAL=6,t.DIRECTION_VERTICAL=Ns,t.DIRECTION_NONE=1,t.DIRECTION_DOWN=zs,t.INPUT_START=1,t.INPUT_MOVE=2,t.INPUT_END=4,t.INPUT_CANCEL=8,t.STATE_POSSIBLE=1,t.STATE_BEGAN=2,t.STATE_CHANGED=4,t.STATE_ENDED=8,t.STATE_RECOGNIZED=8,t.STATE_CANCELLED=16,t.STATE_FAILED=xa,t.Manager=Ra,t.Input=ea,t.TouchAction=Hs,t.TouchInput=ua,t.MouseInput=ya,t.PointerEventInput=aa,t.TouchMouseInput=ka,t.SingleTouchInput=qa,t.Recognizer=Sa,t.AttrRecognizer=Ma,t.Tap=Ta,t.Pan=Da,t.Swipe=Ia,t.Pinch=Ba,t.Rotate=za,t.Press=Na,t.on=Qs,t.off=Js,t.each=js,t.merge=Xa,t.extend=Ya,t.bindFn=Ka,t.assign=fs,t.inherit=Ga,t.bindFn=Ka,t.prefixed=bs,t.toArray=ha,t.inArray=ia,t.uniqueArray=la,t.splitStr=Zs,t.boolOrFn=Rs,t.hasParent=Ws,t.addEventListeners=Qs,t.removeEventListeners=Js,t.defaults=fs({},Aa,{preset:Fa}),t}();function Za(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Qa(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Za(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Za(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Ja(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return th(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return th(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function th(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var eh=ko(\"DELETE\");function ih(t){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return nh.apply(void 0,Eo(e=[{},t]).call(e,n))}function nh(){var t=oh.apply(void 0,arguments);return sh(t),t}function oh(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<2)return e[0];var n;if(e.length>2)return oh.apply(void 0,Eo(n=[nh(e[0],e[1])]).call(n,wo(Oo(e).call(e,2))));var o,r=e[0],s=e[1],a=Ja(Co(s));try{for(a.s();!(o=a.n()).done;){var h=o.value;Object.prototype.propertyIsEnumerable.call(s,h)&&(s[h]===eh?delete r[h]:null===r[h]||null===s[h]||\"object\"!==go(r[h])||\"object\"!==go(s[h])||So(r[h])||So(s[h])?r[h]=rh(s[h]):r[h]=oh(r[h],s[h]))}}catch(t){a.e(t)}finally{a.f()}return r}function rh(t){return So(t)?Io(t).call(t,(function(t){return rh(t)})):\"object\"===go(t)&&null!==t?oh({},t):t}function sh(t){for(var e=0,i=zo(t);e<i.length;e++){var n=i[e];t[n]===eh?delete t[n]:\"object\"===go(t[n])&&null!==t[n]&&sh(t[n])}}function ah(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return hh(e.length?e:[No()])}function hh(t){var e=function(){for(var t=lh(),e=t(\" \"),i=t(\" \"),n=t(\" \"),o=0;o<arguments.length;o++)(e-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(e+=1),(i-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(i+=1),(n-=t(o<0||arguments.length<=o?void 0:arguments[o]))<0&&(n+=1);return[e,i,n]}(t),i=uo(e,3),n=i[0],o=i[1],r=i[2],s=1,a=function(){var t=2091639*n+2.3283064365386963e-10*s;return n=o,o=r,r=t-(s=0|t)};return a.uint32=function(){return 4294967296*a()},a.fract53=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.algorithm=\"Alea\",a.seed=t,a.version=\"0.9\",a}function lh(){var t=4022871197;return function(e){for(var i=e.toString(),n=0;n<i.length;n++){var o=.02519603282416938*(t+=i.charCodeAt(n));o-=t=o>>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}var dh=\"undefined\"!=typeof window?window.Hammer||$a:function(){return{on:t=function(){},off:t,destroy:t,emit:t,get:function(){return{set:t}}};var t};function ch(t){var e,i=this;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement(\"div\")},this._dom.overlay.classList.add(\"vis-overlay\"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((function(){i._dom.overlay.parentNode.removeChild(i._dom.overlay)}));var n=dh(this._dom.overlay);n.on(\"tap\",Vt(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((function(){n.destroy()}));var o=[\"tap\",\"doubletap\",\"press\",\"pinch\",\"pan\",\"panstart\",\"panmove\",\"panend\"];Wo(o).call(o,(function(t){n.on(t,(function(t){t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=function(e){(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||i.deactivate()},document.body.addEventListener(\"click\",this._onClick),this._cleanupQueue.push((function(){document.body.removeEventListener(\"click\",i._onClick)}))),this._escListener=function(t){(\"key\"in t?\"Escape\"===t.key:27===t.keyCode)&&i.deactivate()}}Zt(ch.prototype),ch.current=null,ch.prototype.destroy=function(){var t,e;this.deactivate();var i,n=Ja(Xo(t=er(e=this._cleanupQueue).call(e,0)).call(t));try{for(n.s();!(i=n.n()).done;){(0,i.value)()}}catch(t){n.e(t)}finally{n.f()}},ch.prototype.activate=function(){ch.current&&ch.current.deactivate(),ch.current=this,this.active=!0,this._dom.overlay.style.display=\"none\",this._dom.container.classList.add(\"vis-active\"),this.emit(\"change\"),this.emit(\"activate\"),document.body.addEventListener(\"keydown\",this._escListener)},ch.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display=\"block\",this._dom.container.classList.remove(\"vis-active\"),document.body.removeEventListener(\"keydown\",this._escListener),this.emit(\"change\"),this.emit(\"deactivate\")},ch.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};var uh=/^\\/?Date\\((-?\\d+)/i,fh=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,ph=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,vh=/^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i,gh=/^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;function yh(t){return t instanceof Number||\"number\"==typeof t}function mh(t){if(t)for(;!0===t.hasChildNodes();){var e=t.firstChild;e&&(mh(e),t.removeChild(e))}}function bh(t){return t instanceof String||\"string\"==typeof t}function wh(t){return\"object\"===go(t)&&null!==t}function kh(t,e,i,n){var o=!1;!0===n&&(o=null===e[i]&&void 0!==t[i]),o?delete t[i]:t[i]=e[i]}function _h(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||\"object\"!==go(e[n]))kh(t,e,n,i);else{var o=t[n],r=e[n];wh(o)&&wh(r)&&_h(o,r,i)}}var xh=At;function Eh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o=0;o<t.length;o++){var r=t[o];if(Object.prototype.hasOwnProperty.call(i,r))if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?Ch(e[r],i[r],!1,n):kh(e,i,r,n);else{if(So(i[r]))throw new TypeError(\"Arrays are not supported by deepExtend\");kh(e,i,r,n)}}return e}function Oh(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(So(i))throw new TypeError(\"Arrays are not supported by deepExtend\");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!dr(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?Ch(e[o],i[o]):kh(e,i,o,n);else if(So(i[o])){e[o]=[];for(var r=0;r<i[o].length;r++)e[o].push(i[o][r])}else kh(e,i,o,n);return e}function Ch(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if(\"object\"===go(e[o])&&null!==e[o]&&fr(e[o])===Object.prototype)void 0===t[o]?t[o]=Ch({},e[o],i):\"object\"===go(t[o])&&null!==t[o]&&fr(t[o])===Object.prototype?Ch(t[o],e[o],i):kh(t,e,o,n);else if(So(e[o])){var r;t[o]=Oo(r=e[o]).call(r)}else kh(t,e,o,n);return t}function Sh(t,e){var i;return Eo(i=[]).call(i,wo(t),[e])}function Th(t){return Oo(t).call(t)}function Mh(t){return t.getBoundingClientRect().left}function Ph(t){return t.getBoundingClientRect().top}function Dh(t,e){if(So(t))for(var i=t.length,n=0;n<i;n++)e(t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e(t[o],o,t)}var Ih=_r;function Bh(t,e,i,n){var o;t.addEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.addEventListener(e,i,n)):t.attachEvent(\"on\"+e,i)}function zh(t,e,i,n){var o;t.removeEventListener?(void 0===n&&(n=!1),\"mousewheel\"===e&&dr(o=navigator.userAgent).call(o,\"Firefox\")&&(e=\"DOMMouseScroll\"),t.removeEventListener(e,i,n)):t.detachEvent(\"on\"+e,i)}var Nh={asBoolean:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?0!=t:e||null},asNumber:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},asString:function(t,e){return\"function\"==typeof t&&(t=t()),null!=t?String(t):e||null},asSize:function(t,e){return\"function\"==typeof t&&(t=t()),bh(t)?t:yh(t)?t+\"px\":e||null},asElement:function(t,e){return\"function\"==typeof t&&(t=t()),t||e||null}};function Ah(t){var e;switch(t.length){case 3:case 4:return(e=ph.exec(t))?{r:Br(e[1]+e[1],16),g:Br(e[2]+e[2],16),b:Br(e[3]+e[3],16)}:null;case 6:case 7:return(e=fh.exec(t))?{r:Br(e[1],16),g:Br(e[2],16),b:Br(e[3],16)}:null;default:return null}}function Fh(t,e){if(dr(t).call(t,\"rgba\"))return t;if(dr(t).call(t,\"rgb\")){var i=t.substr(Hr(t).call(t,\"(\")+1).replace(\")\",\"\").split(\",\");return\"rgba(\"+i[0]+\",\"+i[1]+\",\"+i[2]+\",\"+e+\")\"}var n=Ah(t);return null==n?t:\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+e+\")\"}function jh(t,e,i){var n;return\"#\"+Oo(n=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(n,1)}function Rh(t,e){if(bh(t)){var i=t;if(Xh(i)){var n,o=Io(n=i.substr(4).substr(0,i.length-5).split(\",\")).call(n,(function(t){return Br(t)}));i=jh(o[0],o[1],o[2])}if(!0===Yh(i)){var r=Uh(i),s={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},a={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},h=Vh(a.h,a.s,a.v),l=Vh(s.h,s.s,s.v);return{background:i,border:h,highlight:{background:l,border:h},hover:{background:l,border:h}}}return{background:i,border:i,highlight:{background:i,border:i},hover:{background:i,border:i}}}return e?{background:t.background||e.background,border:t.border||e.border,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}:{background:t.background||void 0,border:t.border||void 0,highlight:bh(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:bh(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Lh(t,e,i){t/=255,e/=255,i/=255;var n=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));return n===o?{h:0,s:0,v:n}:{h:60*((t===n?3:i===n?1:5)-(t===n?e-i:i===n?t-e:i-t)/(o-n))/360,s:(o-n)/o,v:o}}var Hh=function(t){var e,i={};return Wo(e=t.split(\";\")).call(e,(function(t){if(\"\"!=Ur(t).call(t)){var e,n,o=t.split(\":\"),r=Ur(e=o[0]).call(e),s=Ur(n=o[1]).call(n);i[r]=s}})),i},Wh=function(t){var e;return Io(e=zo(t)).call(e,(function(e){return e+\": \"+t[e]})).join(\"; \")};function qh(t,e,i){var n,o,r,s=Math.floor(6*t),a=6*t-s,h=i*(1-e),l=i*(1-a*e),d=i*(1-(1-a)*e);switch(s%6){case 0:n=i,o=d,r=h;break;case 1:n=l,o=i,r=h;break;case 2:n=h,o=i,r=d;break;case 3:n=h,o=l,r=i;break;case 4:n=d,o=h,r=i;break;case 5:n=i,o=h,r=l}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*r)}}function Vh(t,e,i){var n=qh(t,e,i);return jh(n.r,n.g,n.b)}function Uh(t){var e=Ah(t);if(!e)throw new TypeError(\"'\".concat(t,\"' is not a valid color.\"));return Lh(e.r,e.g,e.b)}function Yh(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)}function Xh(t){return vh.test(t)}function Gh(t){return gh.test(t)}function Kh(t){if(null===t||\"object\"!==go(t))return null;if(t instanceof Element)return t;var e=Gr(t);for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&\"object\"==go(t[i])&&(e[i]=Kh(t[i]));return e}function $h(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&\"object\"===go(t)},s=function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};if(!r(t))throw new Error(\"Parameter mergeTarget must be an object\");if(!r(e))throw new Error(\"Parameter options must be an object\");if(!o(i))throw new Error(\"Parameter option must have a value\");if(!r(n))throw new Error(\"Parameter globalOptions must be an object\");var a=function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])},h=e[i],l=r(n)&&!s(n),d=l?n[i]:void 0,c=d?d.enabled:void 0;if(void 0!==h){if(\"boolean\"==typeof h)return r(t[i])||(t[i]={}),void(t[i].enabled=h);if(null===h&&!r(t[i])){if(!o(d))return;t[i]=Gr(d)}if(r(h)){var u=!0;void 0!==h.enabled?u=h.enabled:void 0!==c&&(u=d.enabled),a(t,e,i),t[i].enabled=u}}}var Zh={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Qh(t,e){var i;So(e)||(e=[e]);var n,o=Ja(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s<e.length;s++)i&&(i=i[e[s]]);if(void 0!==i)break}}}catch(t){o.e(t)}finally{o.f()}return i}var Jh={black:\"#000000\",navy:\"#000080\",darkblue:\"#00008B\",mediumblue:\"#0000CD\",blue:\"#0000FF\",darkgreen:\"#006400\",green:\"#008000\",teal:\"#008080\",darkcyan:\"#008B8B\",deepskyblue:\"#00BFFF\",darkturquoise:\"#00CED1\",mediumspringgreen:\"#00FA9A\",lime:\"#00FF00\",springgreen:\"#00FF7F\",aqua:\"#00FFFF\",cyan:\"#00FFFF\",midnightblue:\"#191970\",dodgerblue:\"#1E90FF\",lightseagreen:\"#20B2AA\",forestgreen:\"#228B22\",seagreen:\"#2E8B57\",darkslategray:\"#2F4F4F\",limegreen:\"#32CD32\",mediumseagreen:\"#3CB371\",turquoise:\"#40E0D0\",royalblue:\"#4169E1\",steelblue:\"#4682B4\",darkslateblue:\"#483D8B\",mediumturquoise:\"#48D1CC\",indigo:\"#4B0082\",darkolivegreen:\"#556B2F\",cadetblue:\"#5F9EA0\",cornflowerblue:\"#6495ED\",mediumaquamarine:\"#66CDAA\",dimgray:\"#696969\",slateblue:\"#6A5ACD\",olivedrab:\"#6B8E23\",slategray:\"#708090\",lightslategray:\"#778899\",mediumslateblue:\"#7B68EE\",lawngreen:\"#7CFC00\",chartreuse:\"#7FFF00\",aquamarine:\"#7FFFD4\",maroon:\"#800000\",purple:\"#800080\",olive:\"#808000\",gray:\"#808080\",skyblue:\"#87CEEB\",lightskyblue:\"#87CEFA\",blueviolet:\"#8A2BE2\",darkred:\"#8B0000\",darkmagenta:\"#8B008B\",saddlebrown:\"#8B4513\",darkseagreen:\"#8FBC8F\",lightgreen:\"#90EE90\",mediumpurple:\"#9370D8\",darkviolet:\"#9400D3\",palegreen:\"#98FB98\",darkorchid:\"#9932CC\",yellowgreen:\"#9ACD32\",sienna:\"#A0522D\",brown:\"#A52A2A\",darkgray:\"#A9A9A9\",lightblue:\"#ADD8E6\",greenyellow:\"#ADFF2F\",paleturquoise:\"#AFEEEE\",lightsteelblue:\"#B0C4DE\",powderblue:\"#B0E0E6\",firebrick:\"#B22222\",darkgoldenrod:\"#B8860B\",mediumorchid:\"#BA55D3\",rosybrown:\"#BC8F8F\",darkkhaki:\"#BDB76B\",silver:\"#C0C0C0\",mediumvioletred:\"#C71585\",indianred:\"#CD5C5C\",peru:\"#CD853F\",chocolate:\"#D2691E\",tan:\"#D2B48C\",lightgrey:\"#D3D3D3\",palevioletred:\"#D87093\",thistle:\"#D8BFD8\",orchid:\"#DA70D6\",goldenrod:\"#DAA520\",crimson:\"#DC143C\",gainsboro:\"#DCDCDC\",plum:\"#DDA0DD\",burlywood:\"#DEB887\",lightcyan:\"#E0FFFF\",lavender:\"#E6E6FA\",darksalmon:\"#E9967A\",violet:\"#EE82EE\",palegoldenrod:\"#EEE8AA\",lightcoral:\"#F08080\",khaki:\"#F0E68C\",aliceblue:\"#F0F8FF\",honeydew:\"#F0FFF0\",azure:\"#F0FFFF\",sandybrown:\"#F4A460\",wheat:\"#F5DEB3\",beige:\"#F5F5DC\",whitesmoke:\"#F5F5F5\",mintcream:\"#F5FFFA\",ghostwhite:\"#F8F8FF\",salmon:\"#FA8072\",antiquewhite:\"#FAEBD7\",linen:\"#FAF0E6\",lightgoldenrodyellow:\"#FAFAD2\",oldlace:\"#FDF5E6\",red:\"#FF0000\",fuchsia:\"#FF00FF\",magenta:\"#FF00FF\",deeppink:\"#FF1493\",orangered:\"#FF4500\",tomato:\"#FF6347\",hotpink:\"#FF69B4\",coral:\"#FF7F50\",darkorange:\"#FF8C00\",lightsalmon:\"#FFA07A\",orange:\"#FFA500\",lightpink:\"#FFB6C1\",pink:\"#FFC0CB\",gold:\"#FFD700\",peachpuff:\"#FFDAB9\",navajowhite:\"#FFDEAD\",moccasin:\"#FFE4B5\",bisque:\"#FFE4C4\",mistyrose:\"#FFE4E1\",blanchedalmond:\"#FFEBCD\",papayawhip:\"#FFEFD5\",lavenderblush:\"#FFF0F5\",seashell:\"#FFF5EE\",cornsilk:\"#FFF8DC\",lemonchiffon:\"#FFFACD\",floralwhite:\"#FFFAF0\",snow:\"#FFFAFA\",yellow:\"#FFFF00\",lightyellow:\"#FFFFE0\",ivory:\"#FFFFF0\",white:\"#FFFFFF\"},tl=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;Nn(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return Fn(t,[{key:\"insertTo\",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:\"setUpdateCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");this.updateCallback=t}},{key:\"setCloseCallback\",value:function(t){if(\"function\"!=typeof t)throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");this.closeCallback=t}},{key:\"_isColorString\",value:function(t){if(\"string\"==typeof t)return Jh[t]}},{key:\"setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(\"none\"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===bh(t)){if(!0===Xh(t)){var o=t.substr(4).substr(0,t.length-5).split(\",\");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Gh(t)){var r=t.substr(5).substr(0,t.length-6).split(\",\");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Yh(t)){var s=Ah(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:\"1.0\";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \"+es(t));this._setColor(i,e)}}},{key:\"show\",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display=\"block\",this._generateHueCircle()}},{key:\"_hide\",value:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];!0===e&&(this.previousColor=At({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display=\"none\",rs((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:\"_save\",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:\"_apply\",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:\"_loadLast\",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert(\"There is no last color to load...\")}},{key:\"_setColor\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!0===e&&(this.initialColor=At({},t)),this.color=t;var i=Lh(t.r,t.g,t.b),n=2*Math.PI,o=this.r*i.s,r=this.centerCoordinates.x+o*Math.sin(n*i.h),s=this.centerCoordinates.y+o*Math.cos(n*i.h);this.colorPickerSelector.style.left=r-.5*this.colorPickerSelector.clientWidth+\"px\",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+\"px\",this._updatePicker(t)}},{key:\"_setOpacity\",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:\"_setBrightness\",value:function(t){var e=Lh(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=qh(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:\"_updatePicker\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Lh(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle=\"rgba(0,0,0,\"+(1-e.v)+\")\",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),hs(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}},{key:\"_setSize\",value:function(){this.colorPickerCanvas.style.width=\"100%\",this.colorPickerCanvas.style.height=\"100%\",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:\"_create\",value:function(){var t,e,i,n;if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-color-picker\",this.colorPickerDiv=document.createElement(\"div\"),this.colorPickerSelector=document.createElement(\"div\"),this.colorPickerSelector.className=\"vis-selector\",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement(\"canvas\"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext(\"2d\");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement(\"DIV\");r.style.color=\"red\",r.style.fontWeight=\"bold\",r.style.padding=\"10px\",r.innerText=\"Error: your browser does not support HTML canvas\",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className=\"vis-color\",this.opacityDiv=document.createElement(\"div\"),this.opacityDiv.className=\"vis-opacity\",this.brightnessDiv=document.createElement(\"div\"),this.brightnessDiv.className=\"vis-brightness\",this.arrowDiv=document.createElement(\"div\"),this.arrowDiv.className=\"vis-arrow\",this.opacityRange=document.createElement(\"input\");try{this.opacityRange.type=\"range\",this.opacityRange.min=\"0\",this.opacityRange.max=\"100\"}catch(t){}this.opacityRange.value=\"100\",this.opacityRange.className=\"vis-range\",this.brightnessRange=document.createElement(\"input\");try{this.brightnessRange.type=\"range\",this.brightnessRange.min=\"0\",this.brightnessRange.max=\"100\"}catch(t){}this.brightnessRange.value=\"100\",this.brightnessRange.className=\"vis-range\",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement(\"div\"),this.brightnessLabel.className=\"vis-label vis-brightness\",this.brightnessLabel.innerText=\"brightness:\",this.opacityLabel=document.createElement(\"div\"),this.opacityLabel.className=\"vis-label vis-opacity\",this.opacityLabel.innerText=\"opacity:\",this.newColorDiv=document.createElement(\"div\"),this.newColorDiv.className=\"vis-new-color\",this.newColorDiv.innerText=\"new\",this.initialColorDiv=document.createElement(\"div\"),this.initialColorDiv.className=\"vis-initial-color\",this.initialColorDiv.innerText=\"initial\",this.cancelButton=document.createElement(\"div\"),this.cancelButton.className=\"vis-button vis-cancel\",this.cancelButton.innerText=\"cancel\",this.cancelButton.onclick=Vt(t=this._hide).call(t,this,!1),this.applyButton=document.createElement(\"div\"),this.applyButton.className=\"vis-button vis-apply\",this.applyButton.innerText=\"apply\",this.applyButton.onclick=Vt(e=this._apply).call(e,this),this.saveButton=document.createElement(\"div\"),this.saveButton.className=\"vis-button vis-save\",this.saveButton.innerText=\"save\",this.saveButton.onclick=Vt(i=this._save).call(i,this),this.loadButton=document.createElement(\"div\"),this.loadButton.className=\"vis-button vis-load\",this.loadButton.innerText=\"load last\",this.loadButton.onclick=Vt(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:\"_bindHammer\",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new dh(this.colorPickerCanvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"hammer.input\",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on(\"tap\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panstart\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panmove\",(function(e){t._moveSelector(e)})),this.hammer.on(\"panend\",(function(e){t._moveSelector(e)}))}},{key:\"_generateHueCircle\",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext(\"2d\");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o<this.r;o++)e=this.centerCoordinates.x+o*Math.sin(h*n),i=this.centerCoordinates.y+o*Math.cos(h*n),a=qh(.002777777777777778*n,o*l,1),t.fillStyle=\"rgb(\"+a.r+\",\"+a.g+\",\"+a.b+\")\",t.fillRect(e-.5,i-.5,2,2);t.strokeStyle=\"rgba(0,0,0,1)\",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,r,s)}this.generated=!0}},{key:\"_moveSelector\",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,n=t.center.y-e.top,o=.5*this.colorPickerDiv.clientHeight,r=.5*this.colorPickerDiv.clientWidth,s=i-r,a=n-o,h=Math.atan2(s,a),l=.98*Math.min(Math.sqrt(s*s+a*a),r),d=Math.cos(h)*l+o,c=Math.sin(h)*l+r;this.colorPickerSelector.style.top=d-.5*this.colorPickerSelector.clientHeight+\"px\",this.colorPickerSelector.style.left=c-.5*this.colorPickerSelector.clientWidth+\"px\";var u=h/(2*Math.PI);u=u<0?u+1:u;var f=l/this.r,p=Lh(this.color.r,this.color.g,this.color.b);p.h=u,p.s=f;var v=qh(p.h,p.s,p.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor=\"rgba(\"+this.initialColor.r+\",\"+this.initialColor.g+\",\"+this.initialColor.b+\",\"+this.initialColor.a+\")\",this.newColorDiv.style.backgroundColor=\"rgba(\"+this.color.r+\",\"+this.color.g+\",\"+this.color.b+\",\"+this.color.a+\")\"}}]),t}();function el(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];if(e.length<1)throw new TypeError(\"Invalid arguments.\");if(1===e.length)return document.createTextNode(e[0]);var n=document.createElement(e[0]);return n.appendChild(el.apply(void 0,wo(Oo(e).call(e,1)))),n}var il,nl=function(){function t(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};Nn(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},At(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new tl(o),this.wrapper=void 0}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if(\"string\"==typeof t)this.options.filter=t;else if(So(t))this.options.filter=t.join();else if(\"object\"===go(t)){if(null==t)throw new TypeError(\"options cannot be null\");void 0!==t.container&&(this.options.container=t.container),void 0!==mr(t)&&(this.options.filter=mr(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else\"boolean\"==typeof t?(this.options.filter=!0,e=t):\"function\"==typeof t&&(this.options.filter=t,e=!0);!1===mr(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:\"setModuleOptions\",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:\"_create\",value:function(){this._clean(),this.changedOptions=[];var t=mr(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,\"function\"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===Hr(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:\"_push\",value:function(){this.wrapper=document.createElement(\"div\"),this.wrapper.className=\"vis-configuration-wrapper\",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:\"_clean\",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:\"_getValue\",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:\"_makeItem\",value:function(t){if(!0===this.allowCreation){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-item vis-config-s\"+t.length;for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return Wo(n).call(n,(function(t){e.appendChild(t)})),this.domElements.push(e),this.domElements.length}return 0}},{key:\"_makeHeader\",value:function(t){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-header\",e.innerText=t,this._makeItem([],e)}},{key:\"_makeLabel\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement(\"div\");if(n.className=\"vis-configuration vis-config-label vis-config-s\"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(el(\"i\",\"b\",t))}else n.innerText=t+\":\";return n}},{key:\"_makeDropdown\",value:function(t,e,i){var n=document.createElement(\"select\");n.className=\"vis-configuration vis-config-select\";var o=0;void 0!==e&&-1!==Hr(t).call(t,e)&&(o=Hr(t).call(t,e));for(var r=0;r<t.length;r++){var s=document.createElement(\"option\");s.value=t[r],r===o&&(s.selected=\"selected\"),s.innerText=t[r],n.appendChild(s)}var a=this;n.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,n)}},{key:\"_makeRange\",value:function(t,e,i){var n=t[0],o=t[1],r=t[2],s=t[3],a=document.createElement(\"input\");a.className=\"vis-configuration vis-config-range\";try{a.type=\"range\",a.min=o,a.max=r}catch(t){}a.step=s;var h=\"\",l=0;if(void 0!==e){var d=1.2;e<0&&e*d<o?(a.min=Math.ceil(e*d),l=a.min,h=\"range increased\"):e/d<o&&(a.min=Math.ceil(e/d),l=a.min,h=\"range increased\"),e*d>r&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h=\"range increased\"),a.value=e}else a.value=n;var c=document.createElement(\"input\");c.className=\"vis-configuration vis-config-rangeinput\",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);\"\"!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:\"_makeButton\",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement(\"div\");e.className=\"vis-configuration vis-config-button\",e.innerText=\"generate options\",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className=\"vis-configuration vis-config-button hover\"},e.onmouseout=function(){e.className=\"vis-configuration vis-config-button\"},this.optionsContainer=document.createElement(\"div\"),this.optionsContainer.className=\"vis-configuration vis-config-option-container\",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:\"_setupPopup\",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement(\"div\");n.id=\"vis-configuration-popup\",n.className=\"vis-configuration-popup\",n.innerText=t,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:e}}}},{key:\"_removePopup\",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:\"_showPopupIfNeeded\",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=e.left+\"px\",this.popupDiv.html.style.top=e.top-30+\"px\",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=rs((function(){t.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=rs((function(){t._removePopup()}),1800)}}},{key:\"_makeCheckbox\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"checkbox\",n.className=\"vis-configuration vis-config-checkbox\",n.checked=t,void 0!==e&&(n.checked=e,e!==t&&(\"object\"===go(t)?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var o=this;n.onchange=function(){o._update(this.checked,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeTextInput\",value:function(t,e,i){var n=document.createElement(\"input\");n.type=\"text\",n.className=\"vis-configuration vis-config-text\",n.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var o=this;n.onchange=function(){o._update(this.value,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,n)}},{key:\"_makeColorField\",value:function(t,e,i){var n=this,o=t[1],r=document.createElement(\"div\");\"none\"!==(e=void 0===e?o:e)?(r.className=\"vis-configuration vis-config-colorBlock\",r.style.backgroundColor=e):r.className=\"vis-configuration vis-config-colorBlock none\",e=void 0===e?o:e,r.onclick=function(){n._showColorPicker(e,r,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,r)}},{key:\"_showColorPicker\",value:function(t,e,i){var n=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((function(t){var o=\"rgba(\"+t.r+\",\"+t.g+\",\"+t.b+\",\"+t.a+\")\";e.style.backgroundColor=o,n._update(o,i)})),this.colorPicker.setCloseCallback((function(){e.onclick=function(){n._showColorPicker(t,e,i)}}))}},{key:\"_handleObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=mr(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=Sh(e,s);if(\"function\"==typeof o&&!1===(n=o(s,e))&&!So(a)&&\"string\"!=typeof a&&\"boolean\"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(So(a))this._handleArray(a,l,h);else if(\"string\"==typeof a)this._makeTextInput(a,l,h);else if(\"boolean\"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=Sh(h,\"enabled\"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error(\"dont know how to handle\",a,s,h)}}return r}},{key:\"_handleArray\",value:function(t,e,i){\"string\"==typeof t[0]&&\"color\"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):\"string\"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):\"number\"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:\"_update\",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit(\"configChange\",i),this.initialized=!0,this.parent.setOptions(i)}},{key:\"_constructOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t=\"false\"!==(t=\"true\"===t||t)&&t;for(var o=0;o<e.length;o++)\"global\"!==e[o]&&(void 0===n[e[o]]&&(n[e[o]]={}),o!==e.length-1?n=n[e[o]]:n[e[o]]=t);return i}},{key:\"_printOptions\",value:function(){for(var t=this.getOptions();this.optionsContainer.firstChild;)this.optionsContainer.removeChild(this.optionsContainer.firstChild);this.optionsContainer.appendChild(el(\"pre\",\"const options = \"+es(t,null,2)))}},{key:\"getOptions\",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}(),ol=!1,rl=\"background: #FFeeee; color: #dd0000\",sl=ch,al=tl,hl=nl,ll=dh,dl=function(){function t(e,i){Nn(this,t),this.container=e,this.overflowMethod=i||\"cap\",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement(\"div\"),this.frame.className=\"vis-tooltip\",this.container.appendChild(this.frame)}return Fn(t,[{key:\"setPosition\",value:function(t,e){this.x=Br(t),this.y=Br(e)}},{key:\"setText\",value:function(t){if(t instanceof Element){for(;this.frame.firstChild;)this.frame.removeChild(this.frame.firstChild);this.frame.appendChild(t)}else this.frame.innerText=t}},{key:\"show\",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,r=0,s=0;if(\"flip\"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>o-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),s<this.padding&&(s=this.padding),(r=this.x)+i+this.padding>o&&(r=o-i-this.padding),r<this.padding&&(r=this.padding);this.frame.style.left=r+\"px\",this.frame.style.top=s+\"px\",this.frame.style.visibility=\"visible\",this.hidden=!1}else this.hide()}},{key:\"hide\",value:function(){this.hidden=!0,this.frame.style.left=\"0\",this.frame.style.top=\"0\",this.frame.style.visibility=\"hidden\"}},{key:\"destroy\",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}(),cl=rl,ul=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"validate\",value:function(e,i,n){ol=!1,il=i;var o=i;return void 0!==n&&(o=i[n]),t.parse(e,o,[]),ol}},{key:\"parse\",value:function(e,i,n){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.check(o,e,i,n)}},{key:\"check\",value:function(e,i,n,o){if(void 0!==n[e]||void 0!==n.__any__){var r=e,s=!0;void 0===n[e]&&void 0!==n.__any__&&(r=\"__any__\",s=\"object\"===t.getType(i[e]));var a=n[r];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,n,r,a,o)}else t.getSuggestion(e,n,o)}},{key:\"checkFields\",value:function(e,i,n,o,r,s){var a=function(i){console.error(\"%c\"+i+t.printLocation(s,e),rl)},h=t.getType(i[e]),l=r[h];void 0!==l?\"array\"===t.getType(l)&&-1===Hr(l).call(l,i[e])?(a('Invalid option detected in \"'+e+'\". Allowed values are:'+t.print(l)+' not \"'+i[e]+'\". '),ol=!0):\"object\"===h&&\"__any__\"!==o&&(s=Sh(s,e),t.parse(i[e],n[o],s)):void 0===r.any&&(a('Invalid type received for \"'+e+'\". Expected: '+t.print(zo(r))+\". Received [\"+h+'] \"'+i[e]+'\"'),ol=!0)}},{key:\"getType\",value:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"boolean\":t instanceof Number?\"number\":t instanceof String?\"string\":So(t)?\"array\":t instanceof Date?\"date\":void 0!==t.nodeType?\"dom\":!0===t._isAMomentObject?\"moment\":\"object\":\"number\"===e?\"number\":\"boolean\"===e?\"boolean\":\"string\"===e?\"string\":void 0===e?\"undefined\":e}},{key:\"getSuggestion\",value:function(e,i,n){var o,r=t.findInOptions(e,i,n,!1),s=t.findInOptions(e,il,[],!0);o=void 0!==r.indexMatch?\" in \"+t.printLocation(r.path,e,\"\")+'Perhaps it was incomplete? Did you mean: \"'+r.indexMatch+'\"?\\n\\n':s.distance<=4&&r.distance>s.distance?\" in \"+t.printLocation(r.path,e,\"\")+\"Perhaps it was misplaced? Matching option found at: \"+t.printLocation(s.path,s.closestMatch,\"\"):r.distance<=8?'. Did you mean \"'+r.closestMatch+'\"?'+t.printLocation(r.path,e):\". Did you mean one of these: \"+t.print(zo(i))+t.printLocation(n,e),console.error('%cUnknown option detected: \"'+e+'\"'+o,rl),ol=!0}},{key:\"findInOptions\",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s=\"\",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],Sh(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==Hr(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=Th(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:\"printLocation\",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"Problem value found at: \\n\",n=\"\\n\\n\"+i+\"options = {\\n\",o=0;o<t.length;o++){for(var r=0;r<o+1;r++)n+=\"  \";n+=t[o]+\": {\\n\"}for(var s=0;s<t.length+1;s++)n+=\"  \";n+=e+\"\\n\";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)n+=\"  \";n+=\"}\\n\"}return n+\"\\n\\n\"}},{key:\"print\",value:function(t){return es(t).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g,\"\").replace(/(,)/g,\", \")}},{key:\"levenshteinDistance\",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,n,o=[];for(i=0;i<=e.length;i++)o[i]=[i];for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}(),fl=Object.freeze({__proto__:null,Activator:sl,Alea:ah,ColorPicker:al,Configurator:hl,DELETE:eh,HSVToHex:Vh,HSVToRGB:qh,Hammer:ll,Popup:dl,RGBToHSV:Lh,RGBToHex:jh,VALIDATOR_PRINT_STYLE:cl,Validator:ul,addClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=Eo(i).call(i,mr(n).call(n,(function(t){return!dr(i).call(i,t)}))),t.className=i.join(\" \")},addCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e),o=Qa(Qa({},i),n);t.style.cssText=Wh(o)},addEventListener:Bh,binarySearchCustom:function(t,e,i,n){for(var o=0,r=0,s=t.length-1;r<=s&&o<1e4;){var a=Math.floor((r+s)/2),h=t[a],l=e(void 0===n?h[i]:h[i][n]);if(0==l)return a;-1==l?r=a+1:s=a-1,o++}return-1},binarySearchValue:function(t,e,i,n,o){var r,s,a,h,l=0,d=0,c=t.length-1;for(o=null!=o?o:function(t,e){return t==e?0:t<e?-1:1};d<=c&&l<1e4;){if(h=Math.floor(.5*(c+d)),r=t[Math.max(0,h-1)][i],s=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==o(s,e))return h;if(o(r,e)<0&&o(s,e)>0)return\"before\"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return\"before\"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:Kh,copyAndExtendArray:Sh,copyArray:Th,deepExtend:Ch,deepObjectAssign:nh,easingFunctions:Zh,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i<n;i++)if(t[i]!=e[i])return!1;return!0},extend:xh,fillIfDefined:_h,forEach:Dh,getAbsoluteLeft:Mh,getAbsoluteRight:function(t){return t.getBoundingClientRect().right},getAbsoluteTop:Ph,getScrollBarWidth:function(){var t=document.createElement(\"p\");t.style.width=\"100%\",t.style.height=\"200px\";var e=document.createElement(\"div\");e.style.position=\"absolute\",e.style.top=\"0px\",e.style.left=\"0px\",e.style.visibility=\"hidden\",e.style.width=\"200px\",e.style.height=\"150px\",e.style.overflow=\"hidden\",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow=\"scroll\";var n=t.offsetWidth;return i==n&&(n=e.clientWidth),document.body.removeChild(e),i-n},getTarget:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=go(t);return\"object\"===e?null===t?\"null\":t instanceof Boolean?\"Boolean\":t instanceof Number?\"Number\":t instanceof String?\"String\":So(t)?\"Array\":t instanceof Date?\"Date\":\"Object\":\"number\"===e?\"Number\":\"boolean\"===e?\"Boolean\":\"string\"===e?\"String\":void 0===e?\"undefined\":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Uh,hexToRGB:Ah,insertSort:function(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=void 0;for(o=i;o>0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(bh(t)){if(uh.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:yh,isObject:wh,isString:bh,isValidHex:Yh,isValidRGB:Xh,isValidRGBA:Gh,mergeOptions:$h,option:Nh,overrideOpacity:Fh,parseColor:Rh,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:ih,recursiveDOMDelete:mh,removeClassName:function(t,e){var i=t.className.split(\" \"),n=e.split(\" \");i=mr(i).call(i,(function(t){return!dr(n).call(n,t)})),t.className=i.join(\" \")},removeCssText:function(t,e){var i=Hh(t.style.cssText),n=Hh(e);for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&delete i[o];t.style.cssText=Wh(i)},removeEventListener:zh,selectiveBridgeObject:function(t,e){if(null!==e&&\"object\"===go(e)){for(var i=Gr(e),n=0;n<t.length;n++)Object.prototype.hasOwnProperty.call(e,t[n])&&\"object\"==go(e[t[n]])&&(i[t[n]]=Kh(e[t[n]]));return i}return null},selectiveDeepExtend:Eh,selectiveExtend:function(t,e){if(!So(t))throw new Error(\"Array with property names expected as first argument\");for(var i=arguments.length,n=new Array(i>2?i-2:0),o=2;o<i;o++)n[o-2]=arguments[o];for(var r=0,s=n;r<s.length;r++)for(var a=s[r],h=0;h<t.length;h++){var l=t[h];a&&Object.prototype.hasOwnProperty.call(a,l)&&(e[l]=a[l])}return e},selectiveNotDeepExtend:Oh,throttle:function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame((function(){e=!1,t()})))}},toArray:Ih,topMost:Qh,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function pl(t){return _l=t,function(){var t={};xl=0,void(El=_l.charAt(0)),Nl(),\"strict\"===Ol&&(t.strict=!0,Nl());\"graph\"!==Ol&&\"digraph\"!==Ol||(t.type=Ol,Nl());Cl===bl&&(t.id=Ol,Nl());if(\"{\"!=Ol)throw Hl(\"Angle bracket { expected\");if(Nl(),Al(t),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");if(Nl(),\"\"!==Ol)throw Hl(\"End of file expected\");return Nl(),delete t.node,delete t.edge,delete t.graph,t}()}var vl={fontsize:\"font.size\",fontcolor:\"font.color\",labelfontcolor:\"font.color\",fontname:\"font.face\",color:[\"color.border\",\"color.background\"],fillcolor:\"color.background\",tooltip:\"title\",labeltooltip:\"title\"},gl=Gr(vl);gl.color=\"color.color\",gl.style=\"dashes\";var yl=0,ml=1,bl=2,wl=3,kl={\"{\":!0,\"}\":!0,\"[\":!0,\"]\":!0,\";\":!0,\"=\":!0,\",\":!0,\"->\":!0,\"--\":!0},_l=\"\",xl=0,El=\"\",Ol=\"\",Cl=yl;function Sl(){xl++,El=_l.charAt(xl)}function Tl(){return _l.charAt(xl+1)}function Ml(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Pl(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Dl(t,e,i){for(var n=e.split(\".\"),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function Il(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i<n;i++)if(e.id===s.nodes[i].id){o=s.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=Pl(o.attr,t.node))),i=r.length-1;i>=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===Hr(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=Pl(o.attr,e.attr))}function Bl(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Pl({},t.edge);e.attr=Pl(i,e.attr)}}function zl(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=Pl({},t.edge)),r.attr=Pl(r.attr||{},o),null!=o&&o.hasOwnProperty(\"arrows\")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function Nl(){for(Cl=yl,Ol=\"\";\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl();do{var t=!1;if(\"#\"===El){for(var e=xl-1;\" \"===_l.charAt(e)||\"\\t\"===_l.charAt(e);)e--;if(\"\\n\"===_l.charAt(e)||\"\"===_l.charAt(e)){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}}if(\"/\"===El&&\"/\"===Tl()){for(;\"\"!=El&&\"\\n\"!=El;)Sl();t=!0}if(\"/\"===El&&\"*\"===Tl()){for(;\"\"!=El;){if(\"*\"===El&&\"/\"===Tl()){Sl(),Sl();break}Sl()}t=!0}for(;\" \"===El||\"\\t\"===El||\"\\n\"===El||\"\\r\"===El;)Sl()}while(t);if(\"\"!==El){var i=El+Tl();if(kl[i])return Cl=ml,Ol=i,Sl(),void Sl();if(kl[El])return Cl=ml,Ol=El,void Sl();if(Ml(El)||\"-\"===El){for(Ol+=El,Sl();Ml(El);)Ol+=El,Sl();return\"false\"===Ol?Ol=!1:\"true\"===Ol?Ol=!0:isNaN(Number(Ol))||(Ol=Number(Ol)),void(Cl=bl)}if('\"'===El){for(Sl();\"\"!=El&&('\"'!=El||'\"'===El&&'\"'===Tl());)'\"'===El?(Ol+=El,Sl()):\"\\\\\"===El&&\"n\"===Tl()?(Ol+=\"\\n\",Sl()):Ol+=El,Sl();if('\"'!=El)throw Hl('End of string \" expected');return Sl(),void(Cl=bl)}for(Cl=wl;\"\"!=El;)Ol+=El,Sl();throw new SyntaxError('Syntax error in part \"'+Wl(Ol,30)+'\"')}Cl=ml}function Al(t){for(;\"\"!==Ol&&\"}\"!=Ol;)Fl(t),\";\"===Ol&&Nl()}function Fl(t){var e=jl(t);if(e)Rl(t,e);else if(!function(t){if(\"node\"===Ol)return Nl(),t.node=Ll(),\"node\";if(\"edge\"===Ol)return Nl(),t.edge=Ll(),\"edge\";if(\"graph\"===Ol)return Nl(),t.graph=Ll(),\"graph\";return null}(t)){if(Cl!=bl)throw Hl(\"Identifier expected\");var i=Ol;if(Nl(),\"=\"===Ol){if(Nl(),Cl!=bl)throw Hl(\"Identifier expected\");t[i]=Ol,Nl()}else!function(t,e){var i={id:e},n=Ll();n&&(i.attr=n);Il(t,i),Rl(t,e)}(t,i)}}function jl(t){var e=null;if(\"subgraph\"===Ol&&((e={}).type=\"subgraph\",Nl(),Cl===bl&&(e.id=Ol,Nl())),\"{\"===Ol){if(Nl(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Al(e),\"}\"!=Ol)throw Hl(\"Angle bracket } expected\");Nl(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Rl(t,e){for(;\"->\"===Ol||\"--\"===Ol;){var i,n=Ol;Nl();var o=jl(t);if(o)i=o;else{if(Cl!=bl)throw Hl(\"Identifier or subgraph expected\");Il(t,{id:i=Ol}),Nl()}Bl(t,zl(t,e,i,n,Ll())),e=i}}function Ll(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:\"circle\",box:\"box\",crow:\"crow\",curve:\"curve\",icurve:\"inv_curve\",normal:\"triangle\",inv:\"inv_triangle\",diamond:\"diamond\",tee:\"bar\",vee:\"vee\"},r=new Array,s=new Array;\"[\"===Ol;){for(Nl(),i={};\"\"!==Ol&&\"]\"!=Ol;){if(Cl!=bl)throw Hl(\"Attribute name expected\");var a=Ol;if(Nl(),\"=\"!=Ol)throw Hl(\"Equal sign = expected\");if(Nl(),Cl!=bl)throw Hl(\"Attribute value expected\");var h=Ol;\"style\"===a&&(h=n[h]),\"arrowhead\"===a&&(a=\"arrows\",h={to:{enabled:!0,type:o[h]}}),\"arrowtail\"===a&&(a=\"arrows\",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),Nl(),\",\"==Ol&&Nl()}if(\"]\"!=Ol)throw Hl(\"Bracket ] expected\");Nl()}if(dr(s).call(s,\"dir\")){var l={arrows:{}};for(t=0;t<r.length;t++)if(\"arrows\"===r[t].name)if(null!=r[t].value.to)l.arrows.to=t;else{if(null==r[t].value.from)throw Hl(\"Invalid value of arrows\");l.arrows.from=t}else\"dir\"===r[t].name&&(l.dir=t);var d,c,u=r[l.dir].value;if(!dr(s).call(s,\"arrows\"))if(\"both\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1,r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else if(\"forward\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{to:{enabled:!0}}}),l.arrows.to=r.length-1;else if(\"back\"===u)r.push({attr:r[l.dir].attr,name:\"arrows\",value:{from:{enabled:!0}}}),l.arrows.from=r.length-1;else{if(\"none\"!==u)throw Hl('Invalid dir type \"'+u+'\"');r.push({attr:r[l.dir].attr,name:\"arrows\",value:\"\"}),l.arrows.to=r.length-1}if(\"both\"===u)l.arrows.to&&l.arrows.from?(c=r[l.arrows.to].value.to.type,d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}},er(r).call(r,l.arrows.from,1)):l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"arrow\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}});else if(\"back\"===u)l.arrows.to&&l.arrows.from?(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.to?(c=\"\",d=\"arrow\",l.arrows.from=l.arrows.to,r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"\",d=r[l.arrows.from].value.from.type,r[l.arrows.to]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.from]={attr:r[l.arrows.from].attr,name:r[l.arrows.from].name,value:{from:{enabled:!0,type:r[l.arrows.from].value.from.type}}};else if(\"none\"===u){var f;r[f=l.arrows.to?l.arrows.to:l.arrows.from]={attr:r[f].attr,name:r[f].name,value:\"\"}}else{if(\"forward\"!==u)throw Hl('Invalid dir type \"'+u+'\"');l.arrows.to&&l.arrows.from||l.arrows.to?(c=r[l.arrows.to].value.to.type,d=\"\",r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}):l.arrows.from&&(c=\"arrow\",d=\"\",l.arrows.to=l.arrows.from,r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:c},from:{enabled:!0,type:d}}}),r[l.arrows.to]={attr:r[l.arrows.to].attr,name:r[l.arrows.to].name,value:{to:{enabled:!0,type:r[l.arrows.to].value.to.type}}}}er(r).call(r,l.dir,1)}if(dr(s).call(s,\"penwidth\")){var p=[];for(e=r.length,t=0;t<e;t++)\"width\"!==r[t].name&&(\"penwidth\"===r[t].name&&(r[t].name=\"width\"),p.push(r[t]));r=p}for(e=r.length,t=0;t<e;t++)Dl(r[t].attr,r[t].name,r[t].value);return i}function Hl(t){return new SyntaxError(t+', got \"'+Wl(Ol,30)+'\" (char '+xl+\")\")}function Wl(t,e){return t.length<=e?t:t.substr(0,27)+\"...\"}function ql(t,e,i){for(var n=e.split(\".\"),o=n.pop(),r=t,s=0;s<n.length;s++){var a=n[s];a in r||(r[a]={}),r=r[a]}return r[o]=i,t}function Vl(t,e){var i={};for(var n in t)if(t.hasOwnProperty(n)){var o=e[n];So(o)?Wo(o).call(o,(function(e){ql(i,e,t[n])})):ql(i,\"string\"==typeof o?o:n,t[n])}return i}function Ul(t){var e,i=pl(t),n={nodes:[],edges:[],options:{}};i.nodes&&Wo(e=i.nodes).call(e,(function(t){var e={id:t.id,label:String(t.label||t.id)};Pl(e,Vl(t.attr,vl)),e.image&&(e.shape=\"image\"),n.nodes.push(e)}));if(i.edges){var o,r=function(t){var e={from:t.from,to:t.to};return Pl(e,Vl(t.attr,gl)),null==e.arrows&&\"->\"===t.type&&(e.arrows=\"to\"),e};Wo(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&Wo(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=zl(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},So(s=e)?Wo(s).call(s,(function(t){So(a)?Wo(a).call(a,(function(e){h(t,e)})):h(t,a)})):So(a)?Wo(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&Wo(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Yl=Object.freeze({__proto__:null,parseDOT:pl,DOTToGraph:Ul});function Xl(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=Io(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),\"Directed\"===t.type&&(e.arrows=\"to\"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Io(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Gl=Object.freeze({__proto__:null,parseGephi:Xl}),Kl=Object.freeze({__proto__:null,en:{addDescription:\"Click in an empty space to place a new node.\",addEdge:\"Add Edge\",addNode:\"Add Node\",back:\"Back\",close:\"Close\",createEdgeError:\"Cannot link edges to a cluster.\",del:\"Delete selected\",deleteClusterError:\"Clusters cannot be deleted.\",edgeDescription:\"Click on a node and drag the edge to another node to connect them.\",edit:\"Edit\",editClusterError:\"Clusters cannot be edited.\",editEdge:\"Edit Edge\",editEdgeDescription:\"Click on the control points and drag them to a node to connect to it.\",editNode:\"Edit Node\"},de:{addDescription:\"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",addEdge:\"Kante hinzufügen\",addNode:\"Knoten hinzufügen\",back:\"Zurück\",close:\"Schließen\",createEdgeError:\"Es ist nicht möglich, Kanten mit Clustern zu verbinden.\",del:\"Lösche Auswahl\",deleteClusterError:\"Cluster können nicht gelöscht werden.\",edgeDescription:\"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",edit:\"Editieren\",editClusterError:\"Cluster können nicht editiert werden.\",editEdge:\"Kante editieren\",editEdgeDescription:\"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",editNode:\"Knoten editieren\"},es:{addDescription:\"Haga clic en un lugar vacío para colocar un nuevo nodo.\",addEdge:\"Añadir arista\",addNode:\"Añadir nodo\",back:\"Atrás\",close:\"Cerrar\",createEdgeError:\"No se puede conectar una arista a un grupo.\",del:\"Eliminar selección\",deleteClusterError:\"No es posible eliminar grupos.\",edgeDescription:\"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",edit:\"Editar\",editClusterError:\"No es posible editar grupos.\",editEdge:\"Editar arista\",editEdgeDescription:\"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",editNode:\"Editar nodo\"},it:{addDescription:\"Clicca per aggiungere un nuovo nodo\",addEdge:\"Aggiungi un vertice\",addNode:\"Aggiungi un nodo\",back:\"Indietro\",close:\"Chiudere\",createEdgeError:\"Non si possono collegare vertici ad un cluster\",del:\"Cancella la selezione\",deleteClusterError:\"I cluster non possono essere cancellati\",edgeDescription:\"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",edit:\"Modifica\",editClusterError:\"I clusters non possono essere modificati.\",editEdge:\"Modifica il vertice\",editEdgeDescription:\"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",editNode:\"Modifica il nodo\"},nl:{addDescription:\"Klik op een leeg gebied om een nieuwe node te maken.\",addEdge:\"Link toevoegen\",addNode:\"Node toevoegen\",back:\"Terug\",close:\"Sluiten\",createEdgeError:\"Kan geen link maken naar een cluster.\",del:\"Selectie verwijderen\",deleteClusterError:\"Clusters kunnen niet worden verwijderd.\",edgeDescription:\"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",edit:\"Wijzigen\",editClusterError:\"Clusters kunnen niet worden aangepast.\",editEdge:\"Link wijzigen\",editEdgeDescription:\"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",editNode:\"Node wijzigen\"},pt:{addDescription:\"Clique em um espaço em branco para adicionar um novo nó\",addEdge:\"Adicionar aresta\",addNode:\"Adicionar nó\",back:\"Voltar\",close:\"Fechar\",createEdgeError:\"Não foi possível linkar arestas a um cluster.\",del:\"Remover selecionado\",deleteClusterError:\"Clusters não puderam ser removidos.\",edgeDescription:\"Clique em um nó e arraste a aresta até outro nó para conectá-los\",edit:\"Editar\",editClusterError:\"Clusters não puderam ser editados.\",editEdge:\"Editar aresta\",editEdgeDescription:\"Clique nos pontos de controle e os arraste para um nó para conectá-los\",editNode:\"Editar nó\"},ru:{addDescription:\"Кликните в свободное место, чтобы добавить новый узел.\",addEdge:\"Добавить ребро\",addNode:\"Добавить узел\",back:\"Назад\",close:\"Закрывать\",createEdgeError:\"Невозможно соединить ребра в кластер.\",del:\"Удалить выбранное\",deleteClusterError:\"Кластеры не могут быть удалены\",edgeDescription:\"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",edit:\"Редактировать\",editClusterError:\"Кластеры недоступны для редактирования.\",editEdge:\"Редактировать ребро\",editEdgeDescription:\"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",editNode:\"Редактировать узел\"},cn:{addDescription:\"单击空白处放置新节点。\",addEdge:\"添加连接线\",addNode:\"添加节点\",back:\"返回\",close:\"關閉\",createEdgeError:\"无法将连接线连接到群集。\",del:\"删除选定\",deleteClusterError:\"无法删除群集。\",edgeDescription:\"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",edit:\"编辑\",editClusterError:\"无法编辑群集。\",editEdge:\"编辑连接线\",editEdgeDescription:\"单击控制节点并将它们拖到节点上连接。\",editNode:\"编辑节点\"},uk:{addDescription:\"Kлікніть на вільне місце, щоб додати новий вузол.\",addEdge:\"Додати край\",addNode:\"Додати вузол\",back:\"Назад\",close:\"Закрити\",createEdgeError:\"Не можливо об'єднати краї в групу.\",del:\"Видалити обране\",deleteClusterError:\"Групи не можуть бути видалені.\",edgeDescription:\"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",edit:\"Редагувати\",editClusterError:\"Групи недоступні для редагування.\",editEdge:\"Редагувати край\",editEdgeDescription:\"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",editNode:\"Редагувати вузол\"},fr:{addDescription:\"Cliquez dans un endroit vide pour placer un nœud.\",addEdge:\"Ajouter un lien\",addNode:\"Ajouter un nœud\",back:\"Retour\",close:\"Fermer\",createEdgeError:\"Impossible de créer un lien vers un cluster.\",del:\"Effacer la sélection\",deleteClusterError:\"Les clusters ne peuvent pas être effacés.\",edgeDescription:\"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",edit:\"Éditer\",editClusterError:\"Les clusters ne peuvent pas être édités.\",editEdge:\"Éditer le lien\",editEdgeDescription:\"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",editNode:\"Éditer le nœud\"},cs:{addDescription:\"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",addEdge:\"Přidat hranu\",addNode:\"Přidat vrchol\",back:\"Zpět\",close:\"Zavřít\",createEdgeError:\"Nelze připojit hranu ke shluku.\",del:\"Smazat výběr\",deleteClusterError:\"Nelze mazat shluky.\",edgeDescription:\"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",edit:\"Upravit\",editClusterError:\"Nelze upravovat shluky.\",editEdge:\"Upravit hranu\",editEdgeDescription:\"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",editNode:\"Upravit vrchol\"}});var $l=function(){function t(){Nn(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement(\"canvas\")}return Fn(t,[{key:\"init\",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:\"initialized\",value:function(){return void 0!==this.coordinates}},{key:\"_fillMipMap\",value:function(){var t=this.canvas.getContext(\"2d\"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];t.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:\"drawImageAtPosition\",value:function(t,e,i,n,o,r){if(this.initialized())if(e>2){e*=.5;for(var s=0;e>2&&s<this.NUM_ITERATIONS;)e*=.5,s+=1;s>=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Zl=function(){function t(e){Nn(this,t),this.images={},this.imageBroken={},this.callback=e}return Fn(t,[{key:\"_tryloadBrokenUrl\",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error(\"Could not load brokenImage:\",e)},i.image.src=e):console.warn(\"No broken url image defined\"))}},{key:\"_redrawWithImage\",value:function(t){this.callback&&this.callback(t)}},{key:\"load\",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new $l;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error(\"Could not load image:\",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:\"_fixImageCoordinates\",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),Ql=!h((function(){return Object.isExtensible(Object.preventExtensions({}))})),Jl=n((function(t){var e=ut.f,i=!1,n=H(\"meta\"),o=0,r=Object.isExtensible||function(){return!0},s=function(t){e(t,n,{value:{objectID:\"O\"+o++,weakData:{}}})},a=t.exports={enable:function(){a.enable=function(){},i=!0;var t=Ai.f,e=[].splice,o={};o[n]=1,t(o).length&&(Ai.f=function(i){for(var o=t(i),r=0,s=o.length;r<s;r++)if(o[r]===n){e.call(o,r,1);break}return o},gt({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:Li.f}))},fastKey:function(t,e){if(!w(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!j(t,n)){if(!r(t))return\"F\";if(!e)return\"E\";s(t)}return t[n].objectID},getWeakData:function(t,e){if(!j(t,n)){if(!r(t))return!0;if(!e)return!1;s(t)}return t[n].weakData},onFreeze:function(t){return Ql&&i&&r(t)&&!j(t,n)&&s(t),t}};St[n]=!0}));Jl.enable,Jl.fastKey,Jl.getWeakData,Jl.onFreeze;var td=function(t,e){this.stopped=t,this.result=e},ed=function(t,e,i){var n,o,r,s,a,h,l,d=i&&i.that,c=!(!i||!i.AS_ENTRIES),u=!(!i||!i.IS_ITERATOR),f=!(!i||!i.INTERRUPTED),p=lt(e,d,1+c+f),v=function(t){return n&&di(n),new td(!0,t)},g=function(t){return c?(dt(t),f?p(t[0],t[1],v):p(t[0],t[1])):f?p(t,v):p(t)};if(u)n=t;else{if(\"function\"!=typeof(o=yi(t)))throw TypeError(\"Target is not iterable\");if(pi(o)){for(r=0,s=kt(t.length);s>r;r++)if((a=g(t[r]))&&a instanceof td)return a;return new td(!1)}n=o.call(t)}for(h=n.next;!(l=h.call(n)).done;){try{a=g(l.value)}catch(t){throw di(n),t}if(\"object\"==typeof a&&a&&a instanceof td)return a}return new td(!1)},id=function(t,e,i){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(i?i+\" \":\"\")+\"invocation\");return t},nd=ut.f,od=Gi.forEach,rd=we.set,sd=we.getterFor,ad=function(t,e,i){var n,o=-1!==t.indexOf(\"Map\"),r=-1!==t.indexOf(\"Weak\"),s=o?\"set\":\"add\",d=a[t],c=d&&d.prototype,u={};if(l&&\"function\"==typeof d&&(r||c.forEach&&!h((function(){(new d).entries().next()})))){n=e((function(e,i){rd(id(e,n,t),{type:t,collection:new d}),null!=i&&ed(i,e[s],{that:e,AS_ENTRIES:o})}));var f=sd(t);od([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(t){var e=\"add\"==t||\"set\"==t;!(t in c)||r&&\"clear\"==t||ft(n.prototype,t,(function(i,n){var o=f(this).collection;if(!e&&r&&!w(i))return\"get\"==t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||nd(n.prototype,\"size\",{configurable:!0,get:function(){return f(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Jl.enable();return Ye(n,t,!1,!0),u[t]=n,gt({global:!0,forced:!0},u),r||i.setStrong(n,t,o),n},hd=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:Ze(t,n,e[n],i);return t},ld=U(\"species\"),dd=ut.f,cd=Jl.fastKey,ud=we.set,fd=we.getterFor,pd={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),ud(t,{type:e,index:Fe(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=fd(e),s=function(t,e,i){var n,o,s=r(t),h=a(t,e);return h?h.value=i:(s.last=h={index:o=cd(e,!0),key:e,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=h),n&&(n.next=h),l?s.size++:t.size++,\"F\"!==o&&(s.index[o]=h)),t},a=function(t,e){var i,n=r(t),o=cd(e);if(\"F\"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key==e)return i};return hd(o.prototype,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),n=a(e,t);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first==n&&(i.first=o),i.last==n&&(i.last=s),l?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=r(this),n=lt(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!a(this,t)}}),hd(o.prototype,i?{get:function(t){var e=a(this,t);return e&&e.value},set:function(t,e){return s(this,0===t?0:t,e)}}:{add:function(t){return s(this,t=0===t?0:t,t)}}),l&&dd(o.prototype,\"size\",{get:function(){return r(this).size}}),o},setStrong:function(t,e,i){var n=e+\" Iterator\",o=fd(e),r=fd(n);ri(t,e,(function(t,e){ud(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?\"keys\"==e?{value:i.key,done:!1}:\"values\"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?\"entries\":\"values\",!i,!0),function(t){var e=x(t),i=ut.f;l&&e&&!e[ld]&&i(e,ld,{configurable:!0,get:function(){return this}})}(e)}};ad(\"Map\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var vd=k.Map,gd=function(){function t(){Nn(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},{border:\"#FFA500\",background:\"#FFFF00\",highlight:{border:\"#FFA500\",background:\"#FFFFA3\"},hover:{border:\"#FFA500\",background:\"#FFFFA3\"}},{border:\"#FA0A10\",background:\"#FB7E81\",highlight:{border:\"#FA0A10\",background:\"#FFAFB1\"},hover:{border:\"#FA0A10\",background:\"#FFAFB1\"}},{border:\"#41A906\",background:\"#7BE141\",highlight:{border:\"#41A906\",background:\"#A1EC76\"},hover:{border:\"#41A906\",background:\"#A1EC76\"}},{border:\"#E129F0\",background:\"#EB7DF4\",highlight:{border:\"#E129F0\",background:\"#F0B3F5\"},hover:{border:\"#E129F0\",background:\"#F0B3F5\"}},{border:\"#7C29F0\",background:\"#AD85E4\",highlight:{border:\"#7C29F0\",background:\"#D3BDF0\"},hover:{border:\"#7C29F0\",background:\"#D3BDF0\"}},{border:\"#C37F00\",background:\"#FFA807\",highlight:{border:\"#C37F00\",background:\"#FFCA66\"},hover:{border:\"#C37F00\",background:\"#FFCA66\"}},{border:\"#4220FB\",background:\"#6E6EFD\",highlight:{border:\"#4220FB\",background:\"#9B9BFD\"},hover:{border:\"#4220FB\",background:\"#9B9BFD\"}},{border:\"#FD5A77\",background:\"#FFC0CB\",highlight:{border:\"#FD5A77\",background:\"#FFD1D9\"},hover:{border:\"#FD5A77\",background:\"#FFD1D9\"}},{border:\"#4AD63A\",background:\"#C2FABC\",highlight:{border:\"#4AD63A\",background:\"#E6FFE3\"},hover:{border:\"#4AD63A\",background:\"#E6FFE3\"}},{border:\"#990000\",background:\"#EE0000\",highlight:{border:\"#BB0000\",background:\"#FF3333\"},hover:{border:\"#BB0000\",background:\"#FF3333\"}},{border:\"#FF6000\",background:\"#FF6000\",highlight:{border:\"#FF6000\",background:\"#FF6000\"},hover:{border:\"#FF6000\",background:\"#FF6000\"}},{border:\"#97C2FC\",background:\"#2B7CE9\",highlight:{border:\"#D2E5FF\",background:\"#2B7CE9\"},hover:{border:\"#D2E5FF\",background:\"#2B7CE9\"}},{border:\"#399605\",background:\"#255C03\",highlight:{border:\"#399605\",background:\"#255C03\"},hover:{border:\"#399605\",background:\"#255C03\"}},{border:\"#B70054\",background:\"#FF007E\",highlight:{border:\"#B70054\",background:\"#FF007E\"},hover:{border:\"#B70054\",background:\"#FF007E\"}},{border:\"#AD85E4\",background:\"#7C29F0\",highlight:{border:\"#D3BDF0\",background:\"#7C29F0\"},hover:{border:\"#D3BDF0\",background:\"#7C29F0\"}},{border:\"#4557FA\",background:\"#000EA1\",highlight:{border:\"#6E6EFD\",background:\"#000EA1\"},hover:{border:\"#6E6EFD\",background:\"#000EA1\"}},{border:\"#FFC0CB\",background:\"#FD5A77\",highlight:{border:\"#FFD1D9\",background:\"#FD5A77\"},hover:{border:\"#FFD1D9\",background:\"#FD5A77\"}},{border:\"#C2FABC\",background:\"#74D66A\",highlight:{border:\"#E6FFE3\",background:\"#74D66A\"},hover:{border:\"#E6FFE3\",background:\"#74D66A\"}},{border:\"#EE0000\",background:\"#990000\",highlight:{border:\"#FF3333\",background:\"#BB0000\"},hover:{border:\"#FF3333\",background:\"#BB0000\"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},At(this.options,this.defaultOptions)}return Fn(t,[{key:\"setOptions\",value:function(t){var e=[\"useDefaultGroups\"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Hr(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:\"clear\",value:function(){this._groups=new vd,this._groupNames=[]}},{key:\"get\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:\"add\",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();gt({target:\"Number\",stat:!0},{isNaN:function(t){return t!=t}});var yd=k.Number.isNaN,md=a.isFinite,bd=Number.isFinite||function(t){return\"number\"==typeof t&&md(t)};gt({target:\"Number\",stat:!0},{isFinite:bd});var wd=k.Number.isFinite,kd=Gi.some,_d=Ao(\"some\");gt({target:\"Array\",proto:!0,forced:!_d},{some:function(t){return kd(this,t,arguments.length>1?arguments[1]:void 0)}});var xd=Ht(\"Array\").some,Ed=Array.prototype,Od=function(t){var e=t.some;return t===Ed||t instanceof Array&&e===Ed.some?xd:e},Cd=x(\"Reflect\",\"construct\"),Sd=h((function(){function t(){}return!(Cd((function(){}),[],t)instanceof t)})),Td=!h((function(){Cd((function(){}))})),Md=Sd||Td;gt({target:\"Reflect\",stat:!0,forced:Md,sham:Md},{construct:function(t,e){ht(t),dt(e);var i=arguments.length<3?t:ht(arguments[2]);if(Td&&!Sd)return Cd(t,e,i);if(t==i){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(Lt.apply(t,n))}var o=i.prototype,r=Fe(w(o)?o:Object.prototype),s=Function.apply.call(t,r,e);return w(s)?s:r}});var Pd=k.Reflect.construct,Dd=n((function(t){t.exports=function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t},t.exports.default=t.exports,t.exports.__esModule=!0})),Id=i(Dd),Bd=Xr;gt({target:\"Object\",stat:!0},{setPrototypeOf:$e});var zd=k.Object.setPrototypeOf,Nd=n((function(t){function e(i,n){return t.exports=e=zd||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,e(i,n)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}));i(Nd);var Ad=i(n((function(t){t.exports=function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Bd(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&Nd(t,e)},t.exports.default=t.exports,t.exports.__esModule=!0}))),Fd=i(n((function(t){var e=vo.default;t.exports=function(t,i){if(i&&(\"object\"===e(i)||\"function\"==typeof i))return i;if(void 0!==i)throw new TypeError(\"Derived constructors may only return object or undefined\");return Dd(t)},t.exports.default=t.exports,t.exports.__esModule=!0}))),jd=ur,Rd=n((function(t){function e(i){return t.exports=e=zd?jd:function(t){return t.__proto__||jd(t)},t.exports.default=t.exports,t.exports.__esModule=!0,e(i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0})),Ld=i(Rd),Hd=n((function(t){var e=function(t){var e,i=Object.prototype,n=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},r=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function h(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},\"\")}catch(t){h=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var o=e&&e.prototype instanceof g?e:g,r=Object.create(o.prototype),s=new T(n||[]);return r._invoke=function(t,e,i){var n=c;return function(o,r){if(n===f)throw new Error(\"Generator is already running\");if(n===p){if(\"throw\"===o)throw r;return P()}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=O(s,i);if(a){if(a===v)continue;return a}}if(\"next\"===i.method)i.sent=i._sent=i.arg;else if(\"throw\"===i.method){if(n===c)throw n=p,i.arg;i.dispatchException(i.arg)}else\"return\"===i.method&&i.abrupt(\"return\",i.arg);n=f;var h=d(t,e,i);if(\"normal\"===h.type){if(n=i.done?p:u,h.arg===v)continue;return{value:h.arg,done:i.done}}\"throw\"===h.type&&(n=p,i.method=\"throw\",i.arg=h.arg)}}}(t,i,s),r}function d(t,e,i){try{return{type:\"normal\",arg:t.call(e,i)}}catch(t){return{type:\"throw\",arg:t}}}t.wrap=l;var c=\"suspendedStart\",u=\"suspendedYield\",f=\"executing\",p=\"completed\",v={};function g(){}function y(){}function m(){}var b={};b[r]=function(){return this};var w=Object.getPrototypeOf,k=w&&w(w(M([])));k&&k!==i&&n.call(k,r)&&(b=k);var _=m.prototype=g.prototype=Object.create(b);function x(t){[\"next\",\"throw\",\"return\"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function i(o,r,s,a){var h=d(t[o],t,r);if(\"throw\"!==h.type){var l=h.arg,c=l.value;return c&&\"object\"==typeof c&&n.call(c,\"__await\")?e.resolve(c.__await).then((function(t){i(\"next\",t,s,a)}),(function(t){i(\"throw\",t,s,a)})):e.resolve(c).then((function(t){l.value=t,s(l)}),(function(t){return i(\"throw\",t,s,a)}))}a(h.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,o){i(t,n,e,o)}))}return o=o?o.then(r,r):r()}}function O(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,\"throw\"===i.method){if(t.iterator.return&&(i.method=\"return\",i.arg=e,O(t,i),\"throw\"===i.method))return v;i.method=\"throw\",i.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return v}var o=d(n,t.iterator,i.arg);if(\"throw\"===o.type)return i.method=\"throw\",i.arg=o.arg,i.delegate=null,v;var r=o.arg;return r?r.done?(i[t.resultName]=r.value,i.next=t.nextLoc,\"return\"!==i.method&&(i.method=\"next\",i.arg=e),i.delegate=null,v):r:(i.method=\"throw\",i.arg=new TypeError(\"iterator result is not an object\"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type=\"normal\",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:\"root\"}],t.forEach(C,this),this.reset(!0)}function M(t){if(t){var i=t[r];if(i)return i.call(t);if(\"function\"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function i(){for(;++o<t.length;)if(n.call(t,o))return i.value=t[o],i.done=!1,i;return i.value=e,i.done=!0,i};return s.next=s}}return{next:P}}function P(){return{value:e,done:!0}}return y.prototype=_.constructor=m,m.constructor=y,y.displayName=h(m,a,\"GeneratorFunction\"),t.isGeneratorFunction=function(t){var e=\"function\"==typeof t&&t.constructor;return!!e&&(e===y||\"GeneratorFunction\"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,h(t,a,\"GeneratorFunction\")),t.prototype=Object.create(_),t},t.awrap=function(t){return{__await:t}},x(E.prototype),E.prototype[s]=function(){return this},t.AsyncIterator=E,t.async=function(e,i,n,o,r){void 0===r&&(r=Promise);var s=new E(l(e,i,n,o),r);return t.isGeneratorFunction(i)?s:s.next().then((function(t){return t.done?t.value:s.next()}))},x(_),h(_,a,\"Generator\"),_[r]=function(){return this},_.toString=function(){return\"[object Generator]\"},t.keys=function(t){var e=[];for(var i in t)e.push(i);return e.reverse(),function i(){for(;e.length;){var n=e.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=M,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=e,this.tryEntries.forEach(S),!t)for(var i in this)\"t\"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if(\"throw\"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var i=this;function o(n,o){return a.type=\"throw\",a.arg=t,i.next=n,o&&(i.method=\"next\",i.arg=e),!!o}for(var r=this.tryEntries.length-1;r>=0;--r){var s=this.tryEntries[r],a=s.completion;if(\"root\"===s.tryLoc)return o(\"end\");if(s.tryLoc<=this.prev){var h=n.call(s,\"catchLoc\"),l=n.call(s,\"finallyLoc\");if(h&&l){if(this.prev<s.catchLoc)return o(s.catchLoc,!0);if(this.prev<s.finallyLoc)return o(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return o(s.catchLoc,!0)}else{if(!l)throw new Error(\"try statement without catch or finally\");if(this.prev<s.finallyLoc)return o(s.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var r=o;break}}r&&(\"break\"===t||\"continue\"===t)&&r.tryLoc<=e&&e<=r.finallyLoc&&(r=null);var s=r?r.completion:{};return s.type=t,s.arg=e,r?(this.method=\"next\",this.next=r.finallyLoc,v):this.complete(s)},complete:function(t,e){if(\"throw\"===t.type)throw t.arg;return\"break\"===t.type||\"continue\"===t.type?this.next=t.arg:\"return\"===t.type?(this.rval=this.arg=t.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),S(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if(\"throw\"===n.type){var o=n.arg;S(i)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(t,i,n){return this.delegate={iterator:M(t),resultName:i,nextLoc:n},\"next\"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function(\"r\",\"regeneratorRuntime = r\")(e)}})),Wd=function(t){return function(e,i,n,o){ht(i);var r=A(e),s=y(r),a=kt(r.length),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},qd={left:Wd(!1),right:Wd(!0)},Vd=\"process\"==v(a.process),Ud=qd.left,Yd=Ao(\"reduce\");gt({target:\"Array\",proto:!0,forced:!Yd||!Vd&&M>79&&M<83},{reduce:function(t){return Ud(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}});var Xd=Ht(\"Array\").reduce,Gd=Array.prototype,Kd=function(t){var e=t.reduce;return t===Gd||t instanceof Array&&e===Gd.reduce?Xd:e},$d=function(t,e,i,n,o,r,s,a){for(var h,l=o,d=0,c=!!s&&lt(s,a,3);d<n;){if(d in i){if(h=c?c(i[d],d,e):i[d],r>0&&zi(h))l=$d(t,e,h,kt(h.length),l,r-1)-1;else{if(l>=9007199254740991)throw TypeError(\"Exceed the acceptable array length\");t[l]=h}l++}d++}return l},Zd=$d;gt({target:\"Array\",proto:!0},{flatMap:function(t){var e,i=A(this),n=kt(i.length);return ht(t),(e=Ui(i,0)).length=Zd(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var Qd=Ht(\"Array\").flatMap,Jd=Array.prototype,tc=function(t){var e=t.flatMap;return t===Jd||t instanceof Array&&e===Jd.flatMap?Qd:e};ad(\"Set\",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),pd);var ec=k.Set,ic=fo,nc=function(t){var e=yi(t);if(\"function\"!=typeof e)throw TypeError(String(t)+\" is not iterable\");return dt(e.call(t))},oc=Math.floor,rc=function(t,e){var i=t.length,n=oc(i/2);return i<8?sc(t,e):ac(rc(t.slice(0,n),e),rc(t.slice(n),e),e)},sc=function(t,e){for(var i,n,o=t.length,r=1;r<o;){for(n=r,i=t[r];n&&e(t[n-1],i)>0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},ac=function(t,e,i){for(var n=t.length,o=e.length,r=0,s=0,a=[];r<n||s<o;)r<n&&s<o?a.push(i(t[r],e[s])<=0?t[r++]:e[s++]):a.push(r<n?t[r++]:e[s++]);return a},hc=rc,lc=E.match(/firefox\\/(\\d+)/i),dc=!!lc&&+lc[1],cc=/MSIE|Trident/.test(E),uc=E.match(/AppleWebKit\\/(\\d+)\\./),fc=!!uc&&+uc[1],pc=[],vc=pc.sort,gc=h((function(){pc.sort(void 0)})),yc=h((function(){pc.sort(null)})),mc=Ao(\"sort\"),bc=!h((function(){if(M)return M<70;if(!(dc&&dc>3)){if(cc)return!0;if(fc)return fc<603;var t,e,i,n,o=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)pc.push({k:e+n,v:i})}for(pc.sort((function(t,e){return e.v-t.v})),n=0;n<pc.length;n++)e=pc[n].k.charAt(0),o.charAt(o.length-1)!==e&&(o+=e);return\"DGBEFHACIJK\"!==o}}));gt({target:\"Array\",proto:!0,forced:gc||!yc||!mc||!bc},{sort:function(t){void 0!==t&&ht(t);var e=A(this);if(bc)return void 0===t?vc.call(e):vc.call(e,t);var i,n,o=[],r=kt(e.length);for(n=0;n<r;n++)n in e&&o.push(e[n]);for(i=(o=hc(o,function(t){return function(e,i){return void 0===i?-1:void 0===e?1:void 0!==t?+t(e,i)||0:Qt(e)>Qt(i)?1:-1}}(t))).length,n=0;n<i;)e[n]=o[n++];for(;n<r;)delete e[n++];return e}});var wc,kc=Ht(\"Array\").sort,_c=Array.prototype,xc=function(t){var e=t.sort;return t===_c||t instanceof Array&&e===_c.sort?kc:e},Ec=Ht(\"Array\").keys,Oc=Array.prototype,Cc={DOMTokenList:!0,NodeList:!0},Sc=function(t){var e=t.keys;return t===Oc||t instanceof Array&&e===Oc.keys||Cc.hasOwnProperty(We(t))?Ec:e},Tc=Ht(\"Array\").values,Mc=Array.prototype,Pc={DOMTokenList:!0,NodeList:!0},Dc=function(t){var e=t.values;return t===Mc||t instanceof Array&&e===Mc.values||Pc.hasOwnProperty(We(t))?Tc:e},Ic=Ht(\"Array\").entries,Bc=Array.prototype,zc={DOMTokenList:!0,NodeList:!0},Nc=function(t){var e=t.entries;return t===Bc||t instanceof Array&&e===Bc.entries||zc.hasOwnProperty(We(t))?Ic:e},Ac=new Uint8Array(16);function Fc(){if(!wc&&!(wc=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");return wc(Ac)}var jc=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Rc(t){return\"string\"==typeof t&&jc.test(t)}for(var Lc=[],Hc=0;Hc<256;++Hc)Lc.push((Hc+256).toString(16).substr(1));function Wc(t,e,i){var n=(t=t||{}).random||(t.rng||Fc)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(var o=0;o<16;++o)e[i+o]=n[o];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(Lc[t[e+0]]+Lc[t[e+1]]+Lc[t[e+2]]+Lc[t[e+3]]+\"-\"+Lc[t[e+4]]+Lc[t[e+5]]+\"-\"+Lc[t[e+6]]+Lc[t[e+7]]+\"-\"+Lc[t[e+8]]+Lc[t[e+9]]+\"-\"+Lc[t[e+10]]+Lc[t[e+11]]+Lc[t[e+12]]+Lc[t[e+13]]+Lc[t[e+14]]+Lc[t[e+15]]).toLowerCase();if(!Rc(i))throw TypeError(\"Stringified UUID is invalid\");return i}(n)}function qc(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Vc(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=qc(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=qc(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Uc(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Yc(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Xc(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xc(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Xc(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Gc=function(){function t(e,i,n){var o,r,s;Nn(this,t),this._source=e,this._transformers=i,this._target=n,this._listeners={add:Vt(o=this._add).call(o,this),remove:Vt(r=this._remove).call(r,this),update:Vt(s=this._update).call(s,this)}}return Fn(t,[{key:\"all\",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:\"start\",value:function(){return this._source.on(\"add\",this._listeners.add),this._source.on(\"remove\",this._listeners.remove),this._source.on(\"update\",this._listeners.update),this}},{key:\"stop\",value:function(){return this._source.off(\"add\",this._listeners.add),this._source.off(\"remove\",this._listeners.remove),this._source.off(\"update\",this._listeners.update),this}},{key:\"_transformItems\",value:function(t){var e;return Kd(e=this._transformers).call(e,(function(t,e){return e(t)}),t)}},{key:\"_add\",value:function(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}},{key:\"_update\",value:function(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}},{key:\"_remove\",value:function(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}]),t}(),Kc=function(){function t(e){Nn(this,t),this._source=e,this._transformers=[]}return Fn(t,[{key:\"filter\",value:function(t){return this._transformers.push((function(e){return mr(e).call(e,t)})),this}},{key:\"map\",value:function(t){return this._transformers.push((function(e){return Io(e).call(e,t)})),this}},{key:\"flatMap\",value:function(t){return this._transformers.push((function(e){return tc(e).call(e,t)})),this}},{key:\"to\",value:function(t){return new Gc(this._source,this._transformers,t)}}]),t}();function $c(t){return\"string\"==typeof t||\"number\"==typeof t}var Zc=function(){function t(e){Nn(this,t),this._queue=[],this._timeout=null,this._extended=null,this.delay=null,this.max=1/0,this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}},{key:\"destroy\",value:function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var n=e[i];n.original?t[n.name]=n.original:delete t[n.name]}this._extended=null}}},{key:\"replace\",value:function(t,e){var i=this,n=t[e];if(!n)throw new Error(\"Method \"+e+\" undefined\");t[e]=function(){for(var t=arguments.length,e=new Array(t),o=0;o<t;o++)e[o]=arguments[o];i.queue({args:e,fn:n,context:this})}}},{key:\"queue\",value:function(t){\"function\"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()}},{key:\"_flushIfNeeded\",value:function(){var t=this;this._queue.length>this.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&\"number\"==typeof this.delay&&(this._timeout=rs((function(){t.flush()}),this.delay))}},{key:\"flush\",value:function(){var t,e;Wo(t=er(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:\"extend\",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error(\"Target object already has a property flush\");e.flush=function(){n.flush()};var o=[{name:\"flush\",original:void 0}];if(i&&i.replace)for(var r=0;r<i.replace.length;r++){var s=i.replace[r];o.push({name:s,original:e[s]}),n.replace(e,s)}return n._extended={object:e,methods:o},n}}]),t}(),Qc=function(){function t(){Nn(this,t),this._subscribers={\"*\":[],add:[],remove:[],update:[]},this.subscribe=t.prototype.on,this.unsubscribe=t.prototype.off}return Fn(t,[{key:\"_trigger\",value:function(t,e,i){var n,o;if(\"*\"===t)throw new Error(\"Cannot trigger event *\");Wo(n=Eo(o=[]).call(o,wo(this._subscribers[t]),wo(this._subscribers[\"*\"]))).call(n,(function(n){n(t,e,null!=i?i:null)}))}},{key:\"on\",value:function(t,e){\"function\"==typeof e&&this._subscribers[t].push(e)}},{key:\"off\",value:function(t,e){var i;this._subscribers[t]=mr(i=this._subscribers[t]).call(i,(function(t){return t!==e}))}}]),t}(),Jc=function(t){function e(t){Nn(this,e),this._pairs=t}return Fn(e,[{key:t,value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"entries\",value:Hd.mark((function t(){var e,i,n,o,r;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[0],r=n[1],t.next=7,[o,r];case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"keys\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,1),o=n[0],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"values\",value:Hd.mark((function t(){var e,i,n,o;return Hd.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=Yc(this._pairs),t.prev=1,e.s();case 3:if((i=e.n()).done){t.next=9;break}return n=uo(i.value,2),o=n[1],t.next=7,o;case 7:t.next=3;break;case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(1),e.e(t.t0);case 14:return t.prev=14,e.f(),t.finish(14);case 17:case\"end\":return t.stop()}}),t,this,[[1,11,14,17]])}))},{key:\"toIdArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[0]}))}},{key:\"toItemArray\",value:function(){var t;return Io(t=wo(this._pairs)).call(t,(function(t){return t[1]}))}},{key:\"toEntryArray\",value:function(){return wo(this._pairs)}},{key:\"toObjectMap\",value:function(){var t,e=Gr(null),i=Yc(this._pairs);try{for(i.s();!(t=i.n()).done;){var n=uo(t.value,2),o=n[0],r=n[1];e[o]=r}}catch(t){i.e(t)}finally{i.f()}return e}},{key:\"toMap\",value:function(){return new vd(this._pairs)}},{key:\"toIdSet\",value:function(){return new ec(this.toIdArray())}},{key:\"toItemSet\",value:function(){return new ec(this.toItemArray())}},{key:\"cache\",value:function(){return new e(wo(this._pairs))}},{key:\"distinct\",value:function(t){var e,i=new ec,n=Yc(this._pairs);try{for(n.s();!(e=n.n()).done;){var o=uo(e.value,2),r=o[0],s=o[1];i.add(t(s,r))}}catch(t){n.e(t)}finally{n.f()}return i}},{key:\"filter\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=10;break}if(r=uo(o.value,2),s=r[0],a=r[1],!t(a,s)){e.next=8;break}return e.next=8,[s,a];case 8:e.next=3;break;case 10:e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),n.e(e.t0);case 15:return e.prev=15,n.f(),e.finish(15);case 18:case\"end\":return e.stop()}}),e,null,[[1,12,15,18]])}))))}},{key:\"forEach\",value:function(t){var e,i=Yc(this._pairs);try{for(i.s();!(e=i.n()).done;){var n=uo(e.value,2),o=n[0];t(n[1],o)}}catch(t){i.e(t)}finally{i.f()}}},{key:\"map\",value:function(t){var i=this._pairs;return new e(jn({},ic,Hd.mark((function e(){var n,o,r,s,a;return Hd.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=Yc(i),e.prev=1,n.s();case 3:if((o=n.n()).done){e.next=9;break}return r=uo(o.value,2),s=r[0],a=r[1],e.next=7,[s,t(a,s)];case 7:e.next=3;break;case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),n.e(e.t0);case 14:return e.prev=14,n.f(),e.finish(14);case 17:case\"end\":return e.stop()}}),e,null,[[1,11,14,17]])}))))}},{key:\"max\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h>o&&(o=h,n=a)}return n}},{key:\"min\",value:function(t){var e=nc(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=uo(i.value,2),s=r[0],a=r[1],h=t(a,s);h<o&&(o=h,n=a)}return n}},{key:\"reduce\",value:function(t,e){var i,n=Yc(this._pairs);try{for(n.s();!(i=n.n()).done;){var o=uo(i.value,2),r=o[0];e=t(e,o[1],r)}}catch(t){n.e(t)}finally{n.f()}return e}},{key:\"sort\",value:function(t){var i=this;return new e(jn({},ic,(function(){var e;return nc(xc(e=wo(i._pairs)).call(e,(function(e,i){var n=uo(e,2),o=n[0],r=n[1],s=uo(i,2),a=s[0],h=s[1];return t(r,h,o,a)})))})))}}]),e}(ic);var tu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o;return Nn(this,i),(o=e.call(this))._queue=null,t&&!So(t)&&(n=t,t=[]),o._options=n||{},o._data=new vd,o.length=0,o._idProp=o._options.fieldId||\"id\",t&&t.length&&o.add(t),o.setOptions(n),o}return Fn(i,[{key:\"idProp\",get:function(){return this._idProp}},{key:\"setOptions\",value:function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=Zc.extend(this,{replace:[\"add\",\"update\",\"remove\"]})),t.queue&&\"object\"===go(t.queue)&&this._queue.setOptions(t.queue)))}},{key:\"add\",value:function(t,e){var i,n=this,o=[];if(So(t)){var r=Io(t).call(t,(function(t){return t[n._idProp]}));if(Od(r).call(r,(function(t){return n._data.has(t)})))throw new Error(\"A duplicate id was found in the parameter array.\");for(var s=0,a=t.length;s<a;s++)i=this._addItem(t[s]),o.push(i)}else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");i=this._addItem(t),o.push(i)}return o.length&&this._trigger(\"add\",{items:o},e),o}},{key:\"update\",value:function(t,e){var i=this,n=[],o=[],r=[],s=[],a=this._idProp,h=function(t){var e=t[a];if(null!=e&&i._data.has(e)){var h=t,l=At({},i._data.get(e)),d=i._updateItem(h);o.push(d),s.push(h),r.push(l)}else{var c=i._addItem(t);n.push(c)}};if(So(t))for(var l=0,d=t.length;l<d;l++)t[l]&&\"object\"===go(t[l])?h(t[l]):console.warn(\"Ignoring input item, which is not an object at index \"+l);else{if(!t||\"object\"!==go(t))throw new Error(\"Unknown dataType\");h(t)}if(n.length&&this._trigger(\"add\",{items:n},e),o.length){var c={items:o,oldData:r,data:s};this._trigger(\"update\",c,e)}return Eo(n).call(n,o)}},{key:\"updateOnly\",value:function(t,e){var i,n=this;So(t)||(t=[t]);var o=Io(i=Io(t).call(t,(function(t){var e=n._data.get(t[n._idProp]);if(null==e)throw new Error(\"Updating non-existent items is not allowed.\");return{oldData:e,update:t}}))).call(i,(function(t){var e=t.oldData,i=t.update,o=e[n._idProp],r=ih(e,i);return n._data.set(o,r),{id:o,oldData:e,updatedData:r}}));if(o.length){var r={items:Io(o).call(o,(function(t){return t.id})),oldData:Io(o).call(o,(function(t){return t.oldData})),data:Io(o).call(o,(function(t){return t.updatedData}))};return this._trigger(\"update\",r,e),r.items}return[]}},{key:\"get\",value:function(t,e){var i=void 0,n=void 0,o=void 0;$c(t)?(i=t,o=e):So(t)?(n=t,o=e):o=t;var r,s=o&&\"Object\"===o.returnType?\"Object\":\"Array\",a=o&&mr(o),h=[],l=void 0,d=void 0,c=void 0;if(null!=i)(l=this._data.get(i))&&a&&!a(l)&&(l=void 0);else if(null!=n)for(var u=0,f=n.length;u<f;u++)null==(l=this._data.get(n[u]))||a&&!a(l)||h.push(l);else for(var p,v=0,g=(d=wo(Sc(p=this._data).call(p))).length;v<g;v++)c=d[v],null==(l=this._data.get(c))||a&&!a(l)||h.push(l);if(o&&o.order&&null==i&&this._sort(h,o.order),o&&o.fields){var y=o.fields;if(null!=i&&null!=l)l=this._filterFields(l,y);else for(var m=0,b=h.length;m<b;m++)h[m]=this._filterFields(h[m],y)}if(\"Object\"==s){for(var w={},k=0,_=h.length;k<_;k++){var x=h[k];w[x[this._idProp]]=x}return w}return null!=i?null!==(r=l)&&void 0!==r?r:null:h}},{key:\"getIds\",value:function(t){var e=this._data,i=t&&mr(t),n=t&&t.order,o=wo(Sc(e).call(e)),r=[];if(i)if(n){for(var s=[],a=0,h=o.length;a<h;a++){var l=o[a],d=this._data.get(l);null!=d&&i(d)&&s.push(d)}this._sort(s,n);for(var c=0,u=s.length;c<u;c++)r.push(s[c][this._idProp])}else for(var f=0,p=o.length;f<p;f++){var v=o[f],g=this._data.get(v);null!=g&&i(g)&&r.push(g[this._idProp])}else if(n){for(var y=[],m=0,b=o.length;m<b;m++){var w=o[m];y.push(e.get(w))}this._sort(y,n);for(var k=0,_=y.length;k<_;k++)r.push(y[k][this._idProp])}else for(var x=0,E=o.length;x<E;x++){var O=o[x],C=e.get(O);null!=C&&r.push(C[this._idProp])}return r}},{key:\"getDataSet\",value:function(){return this}},{key:\"forEach\",value:function(t,e){var i=e&&mr(e),n=this._data,o=wo(Sc(n).call(n));if(e&&e.order)for(var r=this.get(e),s=0,a=r.length;s<a;s++){var h=r[s];t(h,h[this._idProp])}else for(var l=0,d=o.length;l<d;l++){var c=o[l],u=this._data.get(c);null==u||i&&!i(u)||t(u,c)}}},{key:\"map\",value:function(t,e){for(var i=e&&mr(e),n=[],o=this._data,r=wo(Sc(o).call(o)),s=0,a=r.length;s<a;s++){var h=r[s],l=this._data.get(h);null==l||i&&!i(l)||n.push(t(l,h))}return e&&e.order&&this._sort(n,e.order),n}},{key:\"_filterFields\",value:function(t,e){var i;return t?Kd(i=So(e)?e:zo(e)).call(i,(function(e,i){return e[i]=t[i],e}),{}):t}},{key:\"_sort\",value:function(t,e){if(\"string\"==typeof e){var i=e;xc(t).call(t,(function(t,e){var n=t[i],o=e[i];return n>o?1:n<o?-1:0}))}else{if(\"function\"!=typeof e)throw new TypeError(\"Order must be a function or a string\");xc(t).call(t,e)}}},{key:\"remove\",value:function(t,e){for(var i=[],n=[],o=So(t)?t:[t],r=0,s=o.length;r<s;r++){var a=this._remove(o[r]);if(a){var h=a[this._idProp];null!=h&&(i.push(h),n.push(a))}}return i.length&&this._trigger(\"remove\",{items:i,oldData:n},e),i}},{key:\"_remove\",value:function(t){var e;if($c(t)?e=t:t&&\"object\"===go(t)&&(e=t[this._idProp]),null!=e&&this._data.has(e)){var i=this._data.get(e)||null;return this._data.delete(e),--this.length,i}return null}},{key:\"clear\",value:function(t){for(var e,i=wo(Sc(e=this._data).call(e)),n=[],o=0,r=i.length;o<r;o++)n.push(this._data.get(i[o]));return this._data.clear(),this.length=0,this._trigger(\"remove\",{items:i,oldData:n},t),i}},{key:\"max\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a>o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"min\",value:function(t){var e,i,n=null,o=null,r=Yc(Dc(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];\"number\"==typeof a&&(null==o||a<o)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:\"distinct\",value:function(t){for(var e=this._data,i=wo(Sc(e).call(e)),n=[],o=0,r=0,s=i.length;r<s;r++){for(var a=i[r],h=e.get(a)[t],l=!1,d=0;d<o;d++)if(n[d]==h){l=!0;break}l||void 0===h||(n[o]=h,o++)}return n}},{key:\"_addItem\",value:function(t){var e=function(t,e){return null==t[e]&&(t[e]=Wc()),t}(t,this._idProp),i=e[this._idProp];if(this._data.has(i))throw new Error(\"Cannot add item: item with id \"+i+\" already exists\");return this._data.set(i,e),++this.length,i}},{key:\"_updateItem\",value:function(t){var e=t[this._idProp];if(null==e)throw new Error(\"Cannot update item: item has no id (item: \"+es(t)+\")\");var i=this._data.get(e);if(!i)throw new Error(\"Cannot update item: no item with id \"+e+\" found\");return this._data.set(e,Vc(Vc({},i),t)),e}},{key:\"stream\",value:function(t){if(t){var e=this._data;return new Jc(jn({},ic,Hd.mark((function i(){var n,o,r,s;return Hd.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:n=Yc(t),i.prev=1,n.s();case 3:if((o=n.n()).done){i.next=11;break}if(r=o.value,null==(s=e.get(r))){i.next=9;break}return i.next=9,[r,s];case 9:i.next=3;break;case 11:i.next=16;break;case 13:i.prev=13,i.t0=i.catch(1),n.e(i.t0);case 16:return i.prev=16,n.f(),i.finish(16);case 19:case\"end\":return i.stop()}}),i,null,[[1,13,16,19]])}))))}var i;return new Jc(jn({},ic,Vt(i=Nc(this._data)).call(i,this._data)))}}]),i}(Qc),eu=function(t){Ad(i,t);var e=Uc(i);function i(t,n){var o,r;return Nn(this,i),(r=e.call(this)).length=0,r._ids=new ec,r._options=n||{},r._listener=Vt(o=r._onEvent).call(o,Id(r)),r.setData(t),r}return Fn(i,[{key:\"idProp\",get:function(){return this.getDataSet().idProp}},{key:\"setData\",value:function(t){if(this._data){this._data.off&&this._data.off(\"*\",this._listener);var e=this._data.getIds({filter:mr(this._options)}),i=this._data.get(e);this._ids.clear(),this.length=0,this._trigger(\"remove\",{items:e,oldData:i})}if(null!=t){this._data=t;for(var n=this._data.getIds({filter:mr(this._options)}),o=0,r=n.length;o<r;o++){var s=n[o];this._ids.add(s)}this.length=n.length,this._trigger(\"add\",{items:n})}else this._data=new tu;this._data.on&&this._data.on(\"*\",this._listener)}},{key:\"refresh\",value:function(){for(var t=this._data.getIds({filter:mr(this._options)}),e=wo(this._ids),i={},n=[],o=[],r=[],s=0,a=t.length;s<a;s++){var h=t[s];i[h]=!0,this._ids.has(h)||(n.push(h),this._ids.add(h))}for(var l=0,d=e.length;l<d;l++){var c=e[l],u=this._data.get(c);null==u?console.error(\"If you see this, report it please.\"):i[c]||(o.push(c),r.push(u),this._ids.delete(c))}this.length+=n.length-o.length,n.length&&this._trigger(\"add\",{items:n}),o.length&&this._trigger(\"remove\",{items:o,oldData:r})}},{key:\"get\",value:function(t,e){if(null==this._data)return null;var i,n=null;$c(t)||So(t)?(n=t,i=e):i=t;var o=At({},this._options,i),r=mr(this._options),s=i&&mr(i);return r&&s&&(o.filter=function(t){return r(t)&&s(t)}),null==n?this._data.get(o):this._data.get(n,o)}},{key:\"getIds\",value:function(t){if(this._data.length){var e,i=mr(this._options),n=null!=t?mr(t):null;return e=n?i?function(t){return i(t)&&n(t)}:n:i,this._data.getIds({filter:e,order:t&&t.order})}return[]}},{key:\"forEach\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);n=r?o?function(t){return o(t)&&r(t)}:r:o,Wo(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}},{key:\"map\",value:function(t,e){if(this._data){var i,n,o=mr(this._options),r=e&&mr(e);return n=r?o?function(t){return o(t)&&r(t)}:r:o,Io(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}},{key:\"getDataSet\",value:function(){return this._data.getDataSet()}},{key:\"stream\",value:function(t){var e;return this._data.stream(t||jn({},ic,Vt(e=Sc(this._ids)).call(e,this._ids)))}},{key:\"dispose\",value:function(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off(\"*\",this._listener);var e,n=\"This data view has already been disposed of.\",o={get:function(){throw new Error(n)},set:function(){throw new Error(n)},configurable:!1},r=Yc(Co(i.prototype));try{for(r.s();!(e=r.n()).done;){var s=e.value;zn(this,s,o)}}catch(t){r.e(t)}finally{r.f()}}},{key:\"_onEvent\",value:function(t,e,i){if(e&&e.items&&this._data){var n=e.items,o=[],r=[],s=[],a=[],h=[],l=[];switch(t){case\"add\":for(var d=0,c=n.length;d<c;d++){var u=n[d];this.get(u)&&(this._ids.add(u),o.push(u))}break;case\"update\":for(var f=0,p=n.length;f<p;f++){var v=n[f];this.get(v)?this._ids.has(v)?(r.push(v),h.push(e.data[f]),a.push(e.oldData[f])):(this._ids.add(v),o.push(v)):this._ids.has(v)&&(this._ids.delete(v),s.push(v),l.push(e.oldData[f]))}break;case\"remove\":for(var g=0,y=n.length;g<y;g++){var m=n[g];this._ids.has(m)&&(this._ids.delete(m),s.push(m),l.push(e.oldData[g]))}}this.length+=o.length-s.length,o.length&&this._trigger(\"add\",{items:o},i),r.length&&this._trigger(\"update\",{items:r,oldData:a,data:h},i),s.length&&this._trigger(\"remove\",{items:s,oldData:l},i)}}}]),i}(Qc);function iu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof e.add&&\"function\"==typeof e.clear&&\"function\"==typeof e.distinct&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.max&&\"function\"==typeof e.min&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.remove&&\"function\"==typeof e.setOptions&&\"function\"==typeof e.stream&&\"function\"==typeof e.update&&\"function\"==typeof e.updateOnly}function nu(t,e){return\"object\"===go(e)&&null!==e&&t===e.idProp&&\"function\"==typeof Wo(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.getDataSet&&\"function\"==typeof e.getIds&&\"number\"==typeof e.length&&\"function\"==typeof Io(e)&&\"function\"==typeof e.off&&\"function\"==typeof e.on&&\"function\"==typeof e.stream&&iu(t,e.getDataSet())}var ou=Object.freeze({__proto__:null,DELETE:eh,DataSet:tu,DataStream:Jc,DataView:eu,Queue:Zc,createNewDataPipeFrom:function(t){return new Kc(t)},isDataSetLike:iu,isDataViewLike:nu}),ru=Tr.trim,su=a.parseFloat,au=1/su(xr+\"-0\")!=-1/0?function(t){var e=ru(Qt(t)),i=su(e);return 0===i&&\"-\"==e.charAt(0)?-0:i}:su;gt({global:!0,forced:parseFloat!=au},{parseFloat:au});var hu=k.parseFloat,lu=Li.f,du=h((function(){return!Object.getOwnPropertyNames(1)}));gt({target:\"Object\",stat:!0,forced:du},{getOwnPropertyNames:lu});var cu=k.Object,uu=function(t){return cu.getOwnPropertyNames(t)};function fu(t,e){var i=[\"node\",\"edge\",\"label\"],n=!0,o=Qh(e,\"chosen\");if(\"boolean\"==typeof o)n=o;else if(\"object\"===go(o)){if(-1===Hr(i).call(i,t))throw new Error(\"choosify: subOption '\"+t+\"' should be one of '\"+i.join(\"', '\")+\"'\");var r=Qh(e,[\"chosen\",t]);\"boolean\"!=typeof r&&\"function\"!=typeof r||(n=r)}return n}function pu(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var n={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var o=-i.angle;e={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else e=n}var r=t.x+t.width,s=t.y+t.width;return t.left<e.x&&r>e.x&&t.top<e.y&&s>e.y}function vu(t){return\"string\"==typeof t&&\"\"!==t}function gu(t,e,i,n){var o=n.x,r=n.y;if(\"function\"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var yu=function(){function t(e){Nn(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return Fn(t,[{key:\"_add\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"normal\";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&\"\"!==e||(n=\" \");var o=this.measureText(n,i),r=At({},Dc(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&\"\"!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:\"curWidth\",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:\"append\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e)}},{key:\"newLine\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\";this._add(this.current,t,e),this.current++}},{key:\"determineLineHeights\",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var n=0;n<e.blocks.length;n++){var o=e.blocks[n];i<o.height&&(i=o.height)}e.height=i}}},{key:\"determineLabelSize\",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>t&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:\"removeEmptyBlocks\",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var n={};At(n,i),n.blocks=[];for(var o=void 0,r=[],s=0;s<i.blocks.length;s++){var a=i.blocks[s];0!==a.width?r.push(a):void 0===o&&(o=a)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,t.push(n)}}return t}},{key:\"finalize\",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}(),mu={\"<b>\":/<b>/,\"<i>\":/<i>/,\"<code>\":/<code>/,\"</b>\":/<\\/b>/,\"</i>\":/<\\/i>/,\"</code>\":/<\\/code>/,\"*\":/\\*/,_:/_/,\"`\":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},bu=function(){function t(e){Nn(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer=\"\",this.modStack=[],this.blocks=[]}return Fn(t,[{key:\"mod\",value:function(){return 0===this.modStack.length?\"normal\":this.modStack[0]}},{key:\"modName\",value:function(){return 0===this.modStack.length?\"normal\":\"mono\"===this.modStack[0]?\"mono\":this.bold&&this.ital?\"boldital\":this.bold?\"bold\":this.ital?\"ital\":void 0}},{key:\"emitBlock\",value:function(){this.spacing&&(this.add(\" \"),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer=\"\")}},{key:\"add\",value:function(t){\" \"===t&&(this.spacing=!0),this.spacing&&(this.buffer+=\" \",this.spacing=!1),\" \"!=t&&(this.buffer+=t)}},{key:\"parseWS\",value:function(t){return!!/[ \\t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:\"setTag\",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:\"unsetTag\",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:\"parseStartTag\",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:\"match\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.prepareRegExp(t),n=uo(i,2),o=n[0],r=n[1],s=o.test(this.text.substr(this.position,r));return s&&e&&(this.position+=r-1),s}},{key:\"parseEndTag\",value:function(t,e,i){var n=this.mod()===t;return!(!(n=\"mono\"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:\"replace\",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:\"prepareRegExp\",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=mu[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),wu=function(){function t(e,i,n,o){var r=this;Nn(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new yu((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;\"\"!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return Fn(t,[{key:\"process\",value:function(t){if(!vu(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\");var i=String(t).split(\"\\n\"),n=i.length;if(e.multi)for(var o=0;o<n;o++){var r=this.splitBlocks(i[o],e.multi);if(void 0!==r)if(0!==r.length){if(e.maxWdt>0)for(var s=0;s<r.length;s++){var a=r[s].mod,h=r[s].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<r.length;l++){var d=r[l].mod,c=r[l].text;this.lines.append(c,d)}this.lines.newLine()}else this.lines.newLine(\"\")}else if(e.maxWdt>0)for(var u=0;u<n;u++)this.splitStringIntoLines(i[u]);else for(var f=0;f<n;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:\"decodeMarkupSystem\",value:function(t){var e=\"none\";return\"markdown\"===t||\"md\"===t?e=\"markdown\":!0!==t&&\"html\"!==t||(e=\"html\"),e}},{key:\"splitHtmlBlocks\",value:function(t){for(var e=new bu(t),i=function(t){return!!/&/.test(t)&&(e.replace(e.text,\"&lt;\",\"<\")||e.replace(e.text,\"&amp;\",\"&\")||e.add(\"&\"),!0)};e.position<e.text.length;){var n=e.text.charAt(e.position);e.parseWS(n)||/</.test(n)&&(e.parseStartTag(\"bold\",\"<b>\")||e.parseStartTag(\"ital\",\"<i>\")||e.parseStartTag(\"mono\",\"<code>\")||e.parseEndTag(\"bold\",\"</b>\")||e.parseEndTag(\"ital\",\"</i>\")||e.parseEndTag(\"mono\",\"</code>\"))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:\"splitMarkdownBlocks\",value:function(t){for(var e=this,i=new bu(t),n=!0,o=function(t){return!!/\\\\/.test(t)&&(i.position<e.text.length+1&&(i.position++,t=e.text.charAt(i.position),/ \\t/.test(t)?i.spacing=!0:(i.add(t),n=!1)),!0)};i.position<i.text.length;){var r=i.text.charAt(i.position);i.parseWS(r)||o(r)||(n||i.spacing)&&(i.parseStartTag(\"bold\",\"*\")||i.parseStartTag(\"ital\",\"_\")||i.parseStartTag(\"mono\",\"`\"))||i.parseEndTag(\"bold\",\"*\",\"afterBold\")||i.parseEndTag(\"ital\",\"_\",\"afterItal\")||i.parseEndTag(\"mono\",\"`\",\"afterMono\")||(i.add(r),n=!1),i.position++}return i.emitBlock(),i.blocks}},{key:\"splitBlocks\",value:function(t,e){var i=this.decodeMarkupSystem(e);return\"none\"===i?[{text:t,mod:\"normal\"}]:\"markdown\"===i?this.splitMarkdownBlocks(t):\"html\"===i?this.splitHtmlBlocks(t):void 0}},{key:\"overMaxWidth\",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:\"getLongestFit\",value:function(t){for(var e=\"\",i=0;i<t.length;){var n=e+(\"\"===e?\"\":\" \")+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:\"getLongestFitWord\",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(Oo(t).call(t,0,e));)e++;return e}},{key:\"splitStringIntoLines\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"normal\",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,\"$1\\r\")).replace(/([^\\r][^ ]*)( +)/g,\"$1\\r$2\\r\")).split(\"\\r\");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(Oo(r).call(r,0,s),e),n[0]=Oo(r).call(r,s)}else{var a=o;\" \"===n[o-1]?o--:\" \"===n[a]&&a++;var h=Oo(n).call(n,0,o).join(\"\");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=Oo(n).call(n,a)}}}}]),t}(),ku=[\"bold\",\"ital\",\"boldital\",\"mono\"],_u=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];Nn(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return Fn(t,[{key:\"setOptions\",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),vu(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if(\"string\"==typeof t.font)this.baseSize=this.fontOptions.size;else if(\"object\"===go(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:\"initFontOptions\",value:function(e){var i=this;Dh(ku,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:Dh(e,(function(t,e){null!=t&&\"object\"!==go(t)&&(i.fontOptions[e]=t)}))}},{key:\"constrain\",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:\"middle\"},i=Qh(t,\"widthConstraint\");if(\"number\"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if(\"object\"===go(i)){var n=Qh(t,[\"widthConstraint\",\"maximum\"]);\"number\"==typeof n&&(e.maxWdt=Number(n));var o=Qh(t,[\"widthConstraint\",\"minimum\"]);\"number\"==typeof o&&(e.minWdt=Number(o))}var r=Qh(t,\"heightConstraint\");if(\"number\"==typeof r)e.minHgt=Number(r);else if(\"object\"===go(r)){var s=Qh(t,[\"heightConstraint\",\"minimum\"]);\"number\"==typeof s&&(e.minHgt=Number(s));var a=Qh(t,[\"heightConstraint\",\"valign\"]);\"string\"==typeof a&&(\"top\"!==a&&\"bottom\"!==a||(e.valign=a))}return e}},{key:\"update\",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),Ch(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=fu(\"label\",e)}},{key:\"adjustSizes\",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:\"addFontOptionsToPile\",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:\"addFontToPile\",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:\"getBasicOptions\",value:function(e){for(var i={},n=0;n<e.length;++n){var o=e[n],r={};t.parseFontString(r,o)&&(o=r),Dh(o,(function(t,e){void 0!==t&&(Object.prototype.hasOwnProperty.call(i,e)||(-1!==Hr(ku).call(ku,e)?i[e]={}:i[e]=t))}))}return i}},{key:\"getFontOption\",value:function(e,i,n){for(var o,r=0;r<e.length;++r){var s=e[r];if(Object.prototype.hasOwnProperty.call(s,i)){if(null==(o=s[i]))continue;var a={};if(t.parseFontString(a,o)&&(o=a),Object.prototype.hasOwnProperty.call(o,n))return o[n]}}if(Object.prototype.hasOwnProperty.call(this.fontOptions,n))return this.fontOptions[n];throw new Error(\"Did not find value for multi-font for property: '\"+n+\"'\")}},{key:\"getFontOptions\",value:function(t,e){for(var i={},n=[\"color\",\"size\",\"face\",\"mod\",\"vadjust\"],o=0;o<n.length;++o){var r=n[o];i[r]=this.getFontOption(t,e,r)}return i}},{key:\"propagateFonts\",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var n=function(t){var n=ku[t],o=e.fontOptions[n];Dh(e.getFontOptions(i,n),(function(t,e){o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)},o=0;o<ku.length;++o)n(o)}},{key:\"draw\",value:function(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s<this.elementOptions.scaling.label.drawThreshold-1||(s>=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:\"_drawBackground\",value:function(t){if(void 0!==this.fontOptions.background&&\"none\"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:\"_drawText\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"middle\",o=arguments.length>4?arguments[4]:void 0,r=this._setAlignment(t,e,i,n),s=uo(r,2);e=s[0],i=s[1],t.textAlign=\"left\",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(\"top\"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),\"bottom\"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var a=0;a<this.lineCount;a++){var h=this.lines[a];if(h&&h.blocks){var l=0;this.isEdgeLabel||\"center\"===this.fontOptions.align?l+=(this.size.width-h.width)/2:\"right\"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var d=0;d<h.blocks.length;d++){var c=h.blocks[d];t.font=c.font;var u=this._getColor(c.color,o,c.strokeColor),f=uo(u,2),p=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin=\"round\"),t.fillStyle=p,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:\"_setAlignment\",value:function(t,e,i,n){if(this.isEdgeLabel&&\"horizontal\"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;\"top\"===this.fontOptions.align?(t.textBaseline=\"alphabetic\",i-=4):\"bottom\"===this.fontOptions.align?(t.textBaseline=\"hanging\",i+=4):t.textBaseline=\"middle\"}else t.textBaseline=n;return[e,i]}},{key:\"_getColor\",value:function(t,e,i){var n=t||\"#000000\",o=i||\"#ffffff\";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Fh(n,r),o=Fh(o,r)}return[n,o]}},{key:\"getTextSize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:\"getSize\",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case\"middle\":t=i,e=.5*-this.size.height;break;case\"top\":t=i,e=-(this.size.height+2);break;case\"bottom\":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:\"calculateLabelSize\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"middle\";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,\"hanging\"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:\"getFormattingValues\",value:function(t,e,i,n){var o=function(t,e,i){return\"normal\"===e?\"mod\"===i?\"\":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,\"color\"),size:o(this.fontOptions,n,\"size\"),face:o(this.fontOptions,n,\"face\"),mod:o(this.fontOptions,n,\"mod\"),vadjust:o(this.fontOptions,n,\"vadjust\"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&(\"normal\"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod=\"bold\":\"function\"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s=\"\";return void 0!==r.mod&&\"\"!==r.mod&&(s+=r.mod+\" \"),s+=r.size+\"px \"+r.face,t.font=s.replace(/\"/g,\"\"),r.font=t.font,r.height=r.size,r}},{key:\"differentState\",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:\"_processLabelText\",value:function(t,e,i,n){return new wu(t,this,e,i).process(n)}},{key:\"_processLabel\",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:\"visible\",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:\"parseFontString\",value:function(t,e){if(!e||\"string\"!=typeof e)return!1;var i=e.split(\" \");return t.size=+i[0].replace(\"px\",\"\"),t.face=i[1],t.color=i[2],!0}}]),t}(),xu=function(){function t(e,i,n){Nn(this,t),this.body=i,this.labelModule=n,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"_setMargins\",value:function(t){this.margin={},this.options.margin&&(\"object\"==go(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:\"_distanceToBorder\",value:function(t,e){var i=this.options.borderWidth;return t&&this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:\"enableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"enableBorderDashes\",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:\"disableBorderDashes\",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\"),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:\"needsRefresh\",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:\"initContextForDraw\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:\"performStroke\",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:\"performFill\",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:\"_addBoundingBoxMargin\",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:\"_updateBoundingBox\",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:\"getDimensionsFromLabel\",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function Eu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ou=function(t){Ad(i,t);var e=Eu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Yt(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"updateBoundingBox\",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(xu);function Cu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Su=function(t){Ad(i,t);var e=Cu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return Fn(i,[{key:\"setOptions\",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:\"setImages\",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:\"switchImages\",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:\"_getImagePadding\",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;\"object\"==go(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:\"_resizeImage\",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:\"_drawRawCircle\",value:function(t,e,i,n){this.initContextForDraw(t,n),Ut(t,e,i,n.size),this.performFill(t,n)}},{key:\"_drawImageAtPosition\",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:\"_drawImageLabel\",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,\"hanging\")}}]),i}(xu);function Tu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Mu=function(t){Ad(i,t);var e=Tu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Pu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Du=function(t){Ad(i,t);var e=Pu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:\"updateBoundingBox\",value:function(t,e){\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(Su);function Iu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Bu=function(t){Ad(i,t);var e=Iu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:\"_drawShape\",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call($t,h)?$t[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];CanvasRenderingContext2D.prototype[h].call(t,i)})(t,n,o,a.size),this.performFill(t,a),void 0!==this.options.icon&&void 0!==this.options.icon.code&&(t.font=(r?\"bold \":\"\")+this.height/2+\"px \"+(this.options.icon.face||\"FontAwesome\"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",t.fillText(this.options.icon.code,n,o)),{drawExternalLabel:function(){if(void 0!==l.options.label){l.labelModule.calculateLabelSize(t,r,s,n,o,\"hanging\");var e=o+.5*l.height+.5*l.labelModule.size.height;l.labelModule.draw(t,n,e,r,s,\"hanging\")}l.updateBoundingBox(n,o)}}}},{key:\"updateBoundingBox\",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(xu);function zu(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Nu(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=zu(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=zu(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Au(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Fu=function(t){Ad(i,t);var e=Au(i);function i(t,n,o,r){var s;return Nn(this,i),(s=e.call(this,t,n,o,r)).ctxRenderer=r,s}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o,r),this.left=e-this.width/2,this.top=i-this.height/2,t.save();var s=this.ctxRenderer({ctx:t,id:this.options.id,x:e,y:i,state:{selected:n,hover:o},style:Nu({},r),label:this.options.label});if(null!=s.drawNode&&s.drawNode(),t.restore(),s.drawExternalLabel){var a=s.drawExternalLabel;s.drawExternalLabel=function(){t.save(),a(),t.restore()}}return s.nodeDimensions&&(this.customSizeWidth=s.nodeDimensions.width,this.customSizeHeight=s.nodeDimensions.height),s}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function ju(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ru=function(t){Ad(i,t);var e=ju(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),Gt(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Lu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Hu=function(t){Ad(i,t);var e=Lu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"diamond\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Wu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var qu=function(t){Ad(i,t);var e=Wu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"circle\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t){return t&&this.resize(t),this.options.size}}]),i}(Bu);function Vu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uu=function(t){Ad(i,t);var e=Vu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Xt(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:\"distanceToBorder\",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(xu);function Yu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xu=function(t){Ad(i,t);var e=Yu(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:\"updateBoundingBox\",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:\"_icon\",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?\"bold\":\"\",(null!=this.options.icon.weight&&n?5:0)+s+\"px\",this.options.icon.face].join(\" \"),t.fillStyle=this.options.icon.color||\"black\",t.textAlign=\"center\",t.textBaseline=\"middle\",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error(\"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\")}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function Gu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ku=function(t){Ad(i,t);var e=Gu(i);function i(t,n,o,r,s){var a;return Nn(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return Fn(i,[{key:\"resize\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height;if(n){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:\"draw\",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if(\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Fh(c,r.opacity),u=Fh(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),hs(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:\"updateBoundingBox\",value:function(t,e){this.resize(),\"top-left\"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Su);function $u(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Zu=function(t){Ad(i,t);var e=$u(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"square\",2,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function Qu(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Ju=function(t){Ad(i,t);var e=Qu(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"hexagon\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function tf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var ef=function(t){Ad(i,t);var e=tf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"star\",4,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function nf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var of=function(t){Ad(i,t);var e=nf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return Fn(i,[{key:\"resize\",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:\"draw\",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(xu);function rf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var sf=function(t){Ad(i,t);var e=rf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangle\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function af(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var hf=function(t){Ad(i,t);var e=af(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"draw\",value:function(t,e,i,n,o,r){return this._drawShape(t,\"triangleDown\",3,e,i,n,o,r)}},{key:\"distanceToBorder\",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(Bu);function lf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function df(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=lf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=lf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var cf=function(){function t(e,i,n,o,r,s){Nn(this,t),this.options=Kh(r),this.globalOptions=r,this.defaultOptions=s,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new _u(this.body,this.options,!1),this.setOptions(e)}return Fn(t,[{key:\"attachEdge\",value:function(t){var e;-1===Hr(e=this.edges).call(e,t)&&this.edges.push(t)}},{key:\"detachEdge\",value:function(t){var e,i,n=Hr(e=this.edges).call(e,t);-1!=n&&er(i=this.edges).call(i,n,1)}},{key:\"setOptions\",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.color&&(this._localColor=e.color),void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error(\"Node must have an id\");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=Br(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=Br(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=hu(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"node\",n),this._load_images(),this.updateLabelModule(e),void 0!==e.opacity&&t.checkOpacity(e.opacity)&&(this.options.opacity=e.opacity),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:\"_load_images\",value:function(){if((\"circularImage\"===this.options.shape||\"image\"===this.options.shape)&&void 0===this.options.image)throw new Error(\"Option image must be defined for node type '\"+this.options.shape+\"'\");if(void 0!==this.options.image){if(void 0===this.imagelist)throw new Error(\"Internal Error: No images provided\");if(\"string\"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error(\"No unselected image provided\");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:\"getFormattingValues\",value:function(){var t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):\"function\"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){var e=this.options.opacity;t.borderColor=Fh(t.borderColor,e),t.color=Fh(t.color,e),t.shadowColor=Fh(t.shadowColor,e)}return t}},{key:\"updateLabelModule\",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=\"\"),t.updateGroupOptions(this.options,df(df({},e),{},{color:e&&e.color||this._localColor||void 0}),this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateShape\",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case\"box\":this.shape=new Ou(this.options,this.body,this.labelModule);break;case\"circle\":this.shape=new Mu(this.options,this.body,this.labelModule);break;case\"circularImage\":this.shape=new Du(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"custom\":this.shape=new Fu(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case\"database\":this.shape=new Ru(this.options,this.body,this.labelModule);break;case\"diamond\":this.shape=new Hu(this.options,this.body,this.labelModule);break;case\"dot\":this.shape=new qu(this.options,this.body,this.labelModule);break;case\"ellipse\":this.shape=new Uu(this.options,this.body,this.labelModule);break;case\"icon\":this.shape=new Xu(this.options,this.body,this.labelModule);break;case\"image\":this.shape=new Ku(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case\"square\":this.shape=new Zu(this.options,this.body,this.labelModule);break;case\"hexagon\":this.shape=new Ju(this.options,this.body,this.labelModule);break;case\"star\":this.shape=new ef(this.options,this.body,this.labelModule);break;case\"text\":this.shape=new of(this.options,this.body,this.labelModule);break;case\"triangle\":this.shape=new sf(this.options,this.body,this.labelModule);break;case\"triangleDown\":this.shape=new hf(this.options,this.body,this.labelModule);break;default:this.shape=new Uu(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:\"select\",value:function(){this.selected=!0,this.needsRefresh()}},{key:\"unselect\",value:function(){this.selected=!1,this.needsRefresh()}},{key:\"needsRefresh\",value:function(){this.shape.refreshNeeded=!0}},{key:\"getTitle\",value:function(){return this.options.title}},{key:\"distanceToBorder\",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:\"isFixed\",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"getLabelSize\",value:function(){return this.labelModule.size()}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}},{key:\"updateBoundingBox\",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:\"resize\",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:\"getItemsOnPoint\",value:function(t){var e=[];return this.labelModule.visible()&&pu(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),pu(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:\"isBoundingBoxOverlappingWith\",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:\"checkOpacity\",value:function(t){return 0<=t&&t<=1}},{key:\"checkCoordinateOrigin\",value:function(t){return void 0===t||\"center\"===t||\"top-left\"===t}},{key:\"updateGroupOptions\",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error(\"updateGroupOptions: group values in options don't match.\");if(\"number\"==typeof r||\"string\"==typeof r&&\"\"!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+s.opacity),s.opacity=void 0));var a=mr(o=uu(i)).call(o,(function(t){return null!=i[t]}));a.push(\"font\"),Oh(a,e,s),e.color=Rh(e.color)}}}},{key:\"parseOptions\",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0,s=[\"color\",\"fixed\",\"shadow\"];if(Oh(s,e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error(\"Invalid option for node coordinateOrigin, found: \"+i.shapeProperties.coordinateOrigin),$h(e,i,\"shadow\",o),void 0!==i.color&&null!==i.color){var a=Rh(i.color);_h(e.color,a)}else!0===n&&null===i.color&&(e.color=Kh(o.color));void 0!==i.fixed&&null!==i.fixed&&(\"boolean\"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&\"boolean\"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&\"boolean\"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=Kh(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&$h(e.scaling,i.scaling,\"label\",o.scaling)}},{key:\"checkMass\",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i=\"\";void 0!==e&&(i=\" in node id: \"+e),console.error(\"%cNegative or zero mass disallowed\"+i+\", setting mass to 1.\",cl),t.mass=1}}}]),t}();function uf(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return ff(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ff(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function ff(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var pf=function(){function t(e,i,n,o){var r,s=this;if(Nn(this,t),this.body=e,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=Vt(r=this.create).call(r,this),this.nodesListeners={add:function(t,e){s.add(e.items)},update:function(t,e){s.update(e.items,e.data,e.oldData)},remove:function(t,e){s.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:\"#2B7CE9\",background:\"#97C2FC\",highlight:{border:\"#2B7CE9\",background:\"#D2E5FF\"},hover:{border:\"#2B7CE9\",background:\"#D2E5FF\"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:0,strokeColor:\"#ffffff\",align:\"center\",vadjust:0,multi:!1,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"monospace\",vadjust:2}},group:void 0,hidden:!1,icon:{face:\"FontAwesome\",code:void 0,size:50,color:\"#2B7CE9\"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},shape:\"ellipse\",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:\"center\"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw\"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";this.options=Kh(this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"refreshNodes\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.nodesListeners,(function(t,e){i.body.data.nodes&&i.body.data.nodes.off(e,t)})),delete i.body.functions.createNode,delete i.nodesListeners.add,delete i.nodesListeners.update,delete i.nodesListeners.remove,delete i.nodesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){if(cf.parseOptions(this.options,t),void 0!==t.opacity&&(yd(t.opacity)||!wd(t.opacity)||t.opacity<0||t.opacity>1?console.error(\"Invalid option for node opacity. Value must be between 0 and 1, found: \"+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=zo(this.body.nodes);i<n.length;i++){var o=n[i];this.body.nodes[o].updateLabelModule(),this.body.nodes[o].needsRefresh()}if(void 0!==t.size)for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.body.nodes[r].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(nu(\"id\",t))this.body.data.nodes=t;else if(So(t))this.body.data.nodes=new tu,this.body.data.nodes.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.nodes=new tu}if(i&&Dh(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;Dh(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o<t.length;o++){e=t[o];var r=this.body.data.nodes.get(e),s=this.create(r);n.push(s),this.body.nodes[e]=s}this.layoutEngine.positionInitially(n),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t,e,i){for(var n=this.body.nodes,o=!1,r=0;r<t.length;r++){var s=t[r],a=n[s],h=e[r];void 0!==a?a.setOptions(h)&&(o=!0):(o=!0,a=this.create(h),n[s]=a)}o||void 0===i||(o=Od(e).call(e,(function(t,e){var n=i[e];return n&&n.level!==t.level}))),!0===o?this.body.emitter.emit(\"_dataChanged\"):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit(\"_dataChanged\")}},{key:\"create\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:cf;return new e(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:\"refresh\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Dh(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:\"getPositions\",value:function(t){var e={};if(void 0!==t){if(!0===So(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var n=this.body.nodes[t[i]];e[t[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[t]){var o=this.body.nodes[t];e[t]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var r=0;r<this.body.nodeIndices.length;r++){var s=this.body.nodes[this.body.nodeIndices[r]];e[this.body.nodeIndices[r]]={x:Math.round(s.x),y:Math.round(s.y)}}return e}},{key:\"getPosition\",value:function(t){if(null==t)throw new TypeError(\"No id was specified for getPosition method.\");if(null==this.body.nodes[t])throw new ReferenceError(\"NodeId provided for getPosition does not exist. Provided: \".concat(t));return{x:Math.round(this.body.nodes[t].x),y:Math.round(this.body.nodes[t].y)}}},{key:\"storePositions\",value:function(){var t,e=[],i=this.body.data.nodes.getDataSet(),n=uf(i.get());try{for(n.s();!(t=n.n()).done;){var o=t.value,r=o.id,s=this.body.nodes[r],a=Math.round(s.x),h=Math.round(s.y);o.x===a&&o.y===h||e.push({id:r,x:a,y:h})}}catch(t){n.e(t)}finally{n.f()}i.update(e)}},{key:\"getBoundingBox\",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:\"getConnectedNodes\",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var n=this.body.nodes[t],o={},r=0;r<n.edges.length;r++){var s=n.edges[r];\"to\"!==e&&s.toId==n.id?void 0===o[s.fromId]&&(i.push(s.fromId),o[s.fromId]=!0):\"from\"!==e&&s.fromId==n.id&&void 0===o[s.toId]&&(i.push(s.toId),o[s.toId]=!0)}return i}},{key:\"getConnectedEdges\",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],n=0;n<i.edges.length;n++)e.push(i.edges[n].id);else console.error(\"NodeId provided for getConnectedEdges does not exist. Provided: \",t);return e}},{key:\"moveNode\",value:function(t,e,i){var n=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),rs((function(){n.body.emitter.emit(\"startSimulation\")}),0)):console.error(\"Node id supplied to moveNode does not exist. Provided: \",t)}}]),t}();gt({target:\"Reflect\",stat:!0},{get:function t(e,i){var n,o,r=arguments.length<3?e:arguments[2];return dt(e)===r?e[i]:(n=tt.f(e,i))?j(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(r):w(o=Ee(e))?t(o,i,r):void 0}});var vf=k.Reflect.get,gf=Tn,yf=n((function(t){t.exports=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rd(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0}));i(yf);var mf=i(n((function(t){function e(i,n,o){return\"undefined\"!=typeof Reflect&&vf?(t.exports=e=vf,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=e=function(t,e,i){var n=yf(t,e);if(n){var o=gf(n,e);return o.get?o.get.call(i):o.value}},t.exports.default=t.exports,t.exports.__esModule=!0),e(i,n,o||i)}t.exports=e,t.exports.default=t.exports,t.exports.__esModule=!0}))),bf=Math.hypot,wf=Math.abs,kf=Math.sqrt,_f=!!bf&&bf(1/0,NaN)!==1/0;gt({target:\"Math\",stat:!0,forced:_f},{hypot:function(t,e){for(var i,n,o=0,r=0,s=arguments.length,a=0;r<s;)a<(i=wf(arguments[r++]))?(o=o*(n=a/i)*n+1,a=i):o+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*kf(o)}});var xf=k.Math.hypot;function Ef(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Of=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"transform\",value:function(t,e){So(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s<t.length;++s){var a=t[s],h=a.x*Math.cos(o)-a.y*Math.sin(o),l=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+r*h,a.y=n+r*l}}},{key:\"drawPath\",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),Cf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){if(e.image){t.save(),t.translate(e.point.x,e.point.y),t.rotate(Math.PI/2+e.angle);var i=null!=e.imageWidth?e.imageWidth:e.image.width,n=null!=e.imageHeight?e.imageHeight:e.image.height;e.image.drawImageAtPosition(t,1,-i/2,0,i,n),t.restore()}return!1}}]),i}(Of),Sf=function(t){Ad(i,t);var e=Ef(i);function i(){return Nn(this,i),e.apply(this,arguments)}return Fn(i,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),i}(Of),Tf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:0},{x:0,y:.3},{x:-.4,y:0},{x:0,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Mf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle-n/2,r=e.angle+n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Pf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.3,y:0};Of.transform(i,e),t.strokeStyle=t.fillStyle,t.fillStyle=\"rgba(0, 0, 0, 0)\";var n=Math.PI,o=e.angle+n/2,r=e.angle+3*n/2;return t.beginPath(),t.arc(i.x,i.y,.4*e.length,o,r,!1),t.stroke(),!0}}]),t}(),Df=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:.02,y:0},{x:-1,y:.3},{x:-1,y:-.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),If=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-1,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Bf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i={x:-.4,y:0};return Of.transform(i,e),Ut(t,i.x,i.y,.4*e.length),!0}}]),t}(),zf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Nf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:.3},{x:0,y:-.3},{x:-.6,y:-.3},{x:-.6,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Af=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:0,y:0},{x:-.5,y:-.3},{x:-1,y:0},{x:-.5,y:.3}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),Ff=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i=[{x:-1,y:.3},{x:-.5,y:0},{x:-1,y:-.3},{x:0,y:0}];return Of.transform(i,e),Of.drawPath(t,i),!0}}]),t}(),jf=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"draw\",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case\"image\":return Cf.draw(t,e);case\"circle\":return Bf.draw(t,e);case\"box\":return Nf.draw(t,e);case\"crow\":return Tf.draw(t,e);case\"curve\":return Mf.draw(t,e);case\"diamond\":return Af.draw(t,e);case\"inv_curve\":return Pf.draw(t,e);case\"triangle\":return Df.draw(t,e);case\"inv_triangle\":return If.draw(t,e);case\"bar\":return zf.draw(t,e);case\"vee\":return Ff.draw(t,e);case\"arrow\":default:return Sf.draw(t,e)}}}]),t}();function Rf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function Lf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Rf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Rf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}var Hf=function(){function t(e,i,n){Nn(this,t),this._body=i,this._labelModule=n,this.color={},this.colorDirty=!0,this.hoverWidth=1.5,this.selectionWidth=2,this.setOptions(e),this.fromPoint=this.from,this.toPoint=this.to}return Fn(t,[{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to]}},{key:\"cleanup\",value:function(){return!1}},{key:\"setOptions\",value:function(t){this.options=t,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.id=this.options.id}},{key:\"drawLine\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:\"_drawLine\",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=this._getCircleData(t),s=uo(r,3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}}},{key:\"_drawDashedLine\",value:function(t,e,i,n,o){t.lineCap=\"round\";var r=So(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=this._getCircleData(t),a=uo(s,3),h=a[0],l=a[1],d=a[2];this._circle(t,e,h,l,d)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Kt(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),u=uo(c,3),f=u[0],p=u[1],v=u[2];this._circle(t,e,f,p,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:\"findBorderPosition\",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:\"findBorderPositions\",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=Oo(e=this._getCircleData(t)).call(e,0,2),n=uo(i,2),o=n[0],r=n[1];return{from:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:o,y:r,low:.6,high:.8,direction:1})}}},{key:\"_getCircleData\",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=gu(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:\"_pointOnCircle\",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:\"_findBorderPositionCircle\",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return Lf(Lf({},n),{},{t:d})}},{key:\"getLineWidth\",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:\"getColor\",value:function(t,e){if(!1!==e.inheritsColor){if(\"both\"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Fh(this.from.options.color.border,e.opacity),o=Fh(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return\"to\"===e.inheritsColor?Fh(this.to.options.color.border,e.opacity):Fh(this.from.options.color.border,e.opacity)}return Fh(e.color,e.opacity)}},{key:\"_circle\",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:\"getDistanceToEdge\",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=this._getCircleData(void 0),a=uo(s,3),h=a[0],l=a[1],d=a[2],c=h-o,u=l-r;return Math.abs(Math.sqrt(c*c+u*u)-d)}},{key:\"_getDistanceToLine\",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:\"getArrowData\",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;\"from\"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):\"to\"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/xf(h.x-l.x,h.y-l.y);if(\"middle\"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*(\"from\"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=this._getCircleData(t),_=uo(k,3),x=_[0],E=_[1],O=_[2];if(\"from\"===e){var C=this.options.selfReference.angle,S=this.options.selfReference.angle+Math.PI,T=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:C,high:S,direction:-1});s=-2*T.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=T}else if(\"to\"===e){var M=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,D=this._findBorderPositionCircle(this.from,t,{x:x,y:E,low:M,high:P,direction:1});s=-2*D.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=D}else{var I=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(x,E,O,I),s=-2*I*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:\"drawArrowHead\",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,jf.draw(t,o)&&(this.enableShadow(t,e),hs(t).call(t),this.disableShadow(t,e))}},{key:\"enableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:\"disableShadow\",value:function(t,e){!0===e.shadow&&(t.shadowColor=\"rgba(0,0,0,0)\",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:\"drawBackground\",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:\"setStrokeDashed\",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=So(e)?e:[5,5];t.setLineDash(i)}else console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\");else void 0!==t.setLineDash?t.setLineDash([]):console.warn(\"setLineDash is not supported in this browser. The dashed stroke cannot be used.\")}}]),t}();function Wf(t,e){var i=zo(t);if(On){var n=On(t);e&&(n=mr(n).call(n,(function(e){return Mn(t,e).enumerable}))),i.push.apply(i,n)}return i}function qf(t){for(var e=1;e<arguments.length;e++){var i,n=null!=arguments[e]?arguments[e]:{};if(e%2)Wo(i=Wf(Object(n),!0)).call(i,(function(e){jn(t,e,n[e])}));else if(Dn)In(t,Dn(n));else{var o;Wo(o=Wf(Object(n))).call(o,(function(e){zn(t,e,Mn(n,e))}))}}return t}function Vf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Uf=function(t){Ad(i,t);var e=Vf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_findBorderPositionBezier\",value:function(t,e){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=10,s=.2,a=!1,h=1,l=0,d=this.to,c=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(d=this.from,a=!0,c=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(c=0);var u=0;do{n=.5*(l+h),i=this.getPoint(n,o);var f=Math.atan2(d.y-i.y,d.x-i.x),p=d.distanceToBorder(e,f)+c,v=Math.sqrt(Math.pow(i.x-d.x,2)+Math.pow(i.y-d.y,2)),g=p-v;if(Math.abs(g)<s)break;g<0?!1===a?l=n:h=n:!1===a?h=n:l=n,++u}while(l<=h&&u<r);return qf(qf({},i),{},{t:n})}},{key:\"_getDistanceToBezierEdge\",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))<u?a:u),f=d,p=c;return u}},{key:\"_bezierCurve\",value:function(t,e,i,n){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),null!=i&&null!=i.x?null!=n&&null!=n.x?t.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.drawBackground(t,e),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}}]),i}(Hf);function Yf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Xf=function(t){Ad(i,t);var e=Yf(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o)).via=r.via,r._boundFunction=function(){r.positionBezierNode()},r._body.emitter.on(\"_repositionBezierNodes\",r._boundFunction),r}return Fn(i,[{key:\"setOptions\",value:function(t){mf(Ld(i.prototype),\"setOptions\",this).call(this,t);var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:\"connect\",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:\"cleanup\",value:function(){return this._body.emitter.off(\"_repositionBezierNodes\",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:\"setupSupportNode\",value:function(){if(void 0===this.via){var t=\"edgeId:\"+this.id,e=this._body.functions.createNode({id:t,shape:\"circle\",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:\"positionBezierNode\",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"_getViaCoordinates\",value:function(){return this.via}},{key:\"getViaNode\",value:function(){return this.via}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=this._getCircleData(),n=uo(i,3),o=n[0],r=n[1],s=n[2],a=2*Math.PI*(1-t);return{x:o+s*Math.sin(a),y:r+s-s*(1-Math.cos(a))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(Uf);function Gf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Kf=function(t){Ad(i,t);var e=Gf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_getViaCoordinates\",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if(\"discrete\"===n||\"diagonalCross\"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return\"discrete\"===n&&(o<=r?h=o<i*r?this.from.x:h:l=r<i*o?this.from.y:l),{x:h,y:l}}if(\"straightCross\"===n){var d=(1-i)*o,c=(1-i)*r;return o<=r?(d=0,this.from.y<this.to.y&&(c=-c)):(this.from.x<this.to.x&&(d=-d),c=0),{x:this.to.x+d,y:this.to.y+c}}if(\"horizontal\"===n){var u=(1-i)*o;return this.from.x<this.to.x&&(u=-u),{x:this.to.x+u,y:this.from.y}}if(\"vertical\"===n){var f=(1-i)*r;return this.from.y<this.to.y&&(f=-f),{x:this.from.x,y:this.to.y+f}}if(\"curvedCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var p=Math.sqrt(o*o+r*r),v=Math.PI,g=(Math.atan2(r,o)+(.5*i+.5)*v)%(2*v);return{x:this.from.x+(.5*i+.5)*p*Math.sin(g),y:this.from.y+(.5*i+.5)*p*Math.cos(g)}}if(\"curvedCCW\"===n){o=this.to.x-this.from.x,r=this.from.y-this.to.y;var y=Math.sqrt(o*o+r*r),m=Math.PI,b=(Math.atan2(r,o)+(.5*-i+.5)*m)%(2*m);return{x:this.from.x+(.5*i+.5)*y*Math.sin(b),y:this.from.y+(.5*i+.5)*y*Math.cos(b)}}t=e=o<=r?i*r:i*o,this.from.x>this.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.x<w?this.to.x:w:this.to.x>w?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y<k?this.to.y:k,{x:w,y:k}}},{key:\"_findBorderPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t,n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}}]),i}(Uf);function $f(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}function Zf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var Qf=function(t){Ad(i,t);var e=Zf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e,i){var n=i[0],o=i[1];this._bezierCurve(t,e,n,o)}},{key:\"_getViaCoordinates\",value:function(){var t,e,i,n,o=this.from.x-this.to.x,r=this.from.y-this.to.y,s=this.options.smooth.roundness;return(Math.abs(o)>Math.abs(r)||!0===this.options.smooth.forceDirection||\"horizontal\"===this.options.smooth.forceDirection)&&\"vertical\"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:\"getViaNode\",value:function(){return this._getViaCoordinates()}},{key:\"_findBorderPosition\",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),a=uo(s,2),h=a[0],l=a[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,h,l)}},{key:\"getPoint\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=uo(e,2),n=i[0],o=i[1],r=t,s=[Math.pow(1-r,3),3*r*Math.pow(1-r,2),3*Math.pow(r,2)*(1-r),Math.pow(r,3)],a=s[0]*this.fromPoint.x+s[1]*n.x+s[2]*o.x+s[3]*this.toPoint.x,h=s[0]*this.fromPoint.y+s[1]*n.y+s[2]*o.y+s[3]*this.toPoint.y;return{x:a,y:h}}}]),i}(function(t){Ad(i,t);var e=$f(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_getDistanceToBezierEdge2\",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=g<h?g:h}l=p,d=v}return h}}]),i}(Uf));function Jf(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var tp=function(t){Ad(i,t);var e=Jf(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_line\",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:\"getViaNode\",value:function(){}},{key:\"getPoint\",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:\"_findBorderPosition\",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:\"_getDistanceToEdge\",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(Hf),ep=function(){function t(e,i,n,o,r){if(Nn(this,t),void 0===i)throw new Error(\"No body provided\");this.options=Kh(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new _u(this.body,this.options,!0),this.setOptions(e)}return Fn(t,[{key:\"setOptions\",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=hu(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=fu(\"edge\",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:\"getFormattingValues\",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;\"function\"==typeof r?o.width=r(o.width):\"number\"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;\"function\"==typeof s?o.width=s(o.width):\"number\"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else\"function\"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:\"updateLabelModule\",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:\"updateEdgeType\",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof Xf&&!0===t.enabled&&\"dynamic\"===t.type||this.edgeType instanceof Qf&&!0===t.enabled&&\"cubicBezier\"===t.type||this.edgeType instanceof Kf&&!0===t.enabled&&\"dynamic\"!==t.type&&\"cubicBezier\"!==t.type||this.edgeType instanceof tp&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?\"dynamic\"===t.type?(e=!0,this.edgeType=new Xf(this.options,this.body,this.labelModule)):\"cubicBezier\"===t.type?this.edgeType=new Qf(this.options,this.body,this.labelModule):this.edgeType=new Kf(this.options,this.body,this.labelModule):this.edgeType=new tp(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:\"connect\",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:\"disconnect\",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:\"getTitle\",value:function(){return this.title}},{key:\"isSelected\",value:function(){return this.selected}},{key:\"getValue\",value:function(){return this.options.value}},{key:\"setValueRange\",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:\"_setInteractionWidths\",value:function(){\"function\"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,\"function\"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:\"draw\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:\"drawArrows\",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,\"from\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,\"to\",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,\"middle\",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:\"drawLabel\",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=gu(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:\"getItemsOnPoint\",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();pu(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:\"isOverlappingWith\",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:\"_getRotation\",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if(\"horizontal\"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:\"_pointOnCircle\",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:\"select\",value:function(){this.selected=!0}},{key:\"unselect\",value:function(){this.selected=!1}},{key:\"cleanup\",value:function(){return this.edgeType.cleanup()}},{key:\"remove\",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:\"endPointsValid\",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:\"parseOptions\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=[\"endPointOffset\",\"arrowStrikethrough\",\"id\",\"from\",\"hidden\",\"hoverWidth\",\"labelHighlightBold\",\"length\",\"line\",\"opacity\",\"physics\",\"scaling\",\"selectionWidth\",\"selfReferenceSize\",\"selfReference\",\"to\",\"title\",\"value\",\"width\",\"font\",\"chosen\",\"widthConstraint\"];if(Eh(r,t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(wd(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error(\"endPointOffset.from is not a valid number\"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(wd(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error(\"endPointOffset.to is not a valid number\"))),vu(e.label)?t.label=e.label:vu(t.label)||(t.label=void 0),$h(t,e,\"smooth\",n),$h(t,e,\"shadow\",n),$h(t,e,\"background\",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Gr(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),$h(t.scaling,e.scaling,\"label\",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=Gr(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if(\"string\"==typeof e.arrows){var s=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Hr(s).call(s,\"to\"),t.arrows.middle.enabled=-1!=Hr(s).call(s,\"middle\"),t.arrows.from.enabled=-1!=Hr(s).call(s,\"from\")}else{if(\"object\"!==go(e.arrows))throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\"+es(e.arrows));$h(t.arrows,e.arrows,\"to\",n.arrows),$h(t.arrows,e.arrows,\"middle\",n.arrows),$h(t.arrows,e.arrows,\"from\",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Gr(n.arrows));if(void 0!==e.color&&null!==e.color){var a=bh(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,h=t.color;if(o)Ch(h,n.color,!1,i);else for(var l in h)Object.prototype.hasOwnProperty.call(h,l)&&delete h[l];if(bh(h))h.color=h,h.highlight=h,h.hover=h,h.inherit=!1,void 0===a.opacity&&(h.opacity=1);else{var d=!1;void 0!==a.color&&(h.color=a.color,d=!0),void 0!==a.highlight&&(h.highlight=a.highlight,d=!0),void 0!==a.hover&&(h.hover=a.hover,d=!0),void 0!==a.inherit&&(h.inherit=a.inherit),void 0!==a.opacity&&(h.opacity=Math.min(1,Math.max(0,a.opacity))),!0===d?h.inherit=!1:void 0===h.inherit&&(h.inherit=\"from\")}}else!0===i&&null===e.color&&(t.color=Kh(n.color));!0===i&&null===e.font&&(t.font=Kh(n.font)),Object.prototype.hasOwnProperty.call(e,\"selfReferenceSize\")&&(console.warn(\"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),ip=function(){function t(e,i,n){var o,r=this;Nn(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Vt(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:\"arrow\"},middle:{enabled:!1,scaleFactor:1,type:\"arrow\"},from:{enabled:!1,scaleFactor:1,type:\"arrow\"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:\"#848484\",highlight:\"#848484\",hover:\"#848484\",inherit:\"from\",opacity:1},dashes:!1,font:{color:\"#343434\",size:14,face:\"arial\",background:\"none\",strokeWidth:2,strokeColor:\"#ffffff\",align:\"horizontal\",multi:!1,vadjust:0,bold:{mod:\"bold\"},boldital:{mod:\"bold italic\"},ital:{mod:\"italic\"},mono:{mod:\"\",size:15,face:\"courier new\",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:10,x:5,y:5},background:{enabled:!1,color:\"rgba(111,111,111,1)\",size:10,dashes:!1},smooth:{enabled:!0,type:\"dynamic\",forceDirection:\"none\",roundness:.5},title:void 0,width:1,value:void 0},Ch(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e,i=this;this.body.emitter.on(\"_forceDisableDynamicCurves\",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];\"dynamic\"===t&&(t=\"continuous\");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&\"dynamic\"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit(\"_dataChanged\")})),this.body.emitter.on(\"_dataUpdated\",(function(){i.reconnectEdges()})),this.body.emitter.on(\"refreshEdges\",Vt(t=this.refresh).call(t,this)),this.body.emitter.on(\"refresh\",Vt(e=this.refresh).call(e,this)),this.body.emitter.on(\"destroy\",(function(){Dh(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){ep.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit(\"_dataChanged\")}}},{key:\"setData\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(nu(\"id\",t))this.body.data.edges=t;else if(So(t))this.body.data.edges=new tu,this.body.data.edges.add(t);else{if(t)throw new TypeError(\"Array or DataSet expected\");this.body.data.edges=new tu}if(n&&Dh(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){Dh(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"add\",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<t.length;o++){var r=t[o],s=i[r];s&&s.disconnect();var a=n.get(r,{showInternalIds:!0});i[r]=this.create(a)}this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),!1===e&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"update\",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<t.length;o++){var r=t[o],s=i.get(r),a=e[r];void 0!==a?(a.disconnect(),n=a.setOptions(s)||n,a.connect()):(this.body.edges[r]=this.create(s),n=!0)}!0===n?(this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\"),this.body.emitter.emit(\"_dataChanged\")):this.body.emitter.emit(\"_dataUpdated\")}},{key:\"remove\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;Dh(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"refresh\",value:function(){var t=this;Dh(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:\"create\",value:function(t){return new ep(t,this.body,this.images,this.options,this.defaultOptions)}},{key:\"reconnectEdges\",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:\"getConnectedNodes\",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:\"_updateState\",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:\"_removeInvalidEdges\",value:function(){var t=this,e=[];Dh(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:\"_addMissingEdges\",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];Wo(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),np=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=ah(\"BARNES HUT SOLVER\")}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:\"solve\",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r<n;r++)(t=e[i[r]]).options.mass>0&&this._getForceContributions(o.root,t)}}},{key:\"_getForceContributions\",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:\"_getForceContribution\",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:\"_formBarnesHutTree\",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h<n;h++){var l=t[e[h]],d=l.x,c=l.y;l.options.mass>0&&(d<o&&(o=d),d>s&&(s=d),c<r&&(r=c),c>a&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)(i=t[e[m]]).options.mass>0&&this._placeInTree(y.root,i);return y}},{key:\"_updateBranchMass\",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<r?r:t.maxWidth}},{key:\"_placeInTree\",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var n,o=t.children.NW.range;n=o.maxX>e.x?o.maxY>e.y?\"NW\":\"SW\":o.maxY>e.y?\"NE\":\"SE\",this._placeInRegion(t,e,n)}},{key:\"_placeInRegion\",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:\"_splitBranch\",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,\"NW\"),this._insertRegion(t,\"NE\"),this._insertRegion(t,\"SW\"),this._insertRegion(t,\"SE\"),null!=e&&this._placeInTree(t,e)}},{key:\"_insertRegion\",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case\"NW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case\"NE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case\"SW\":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case\"SE\":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:\"_debug\",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:\"_drawBranch\",value:function(t,e,i){void 0===i&&(i=\"#FF0000\"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),op=function(){function t(e,i,n){Nn(this,t),this._rng=ah(\"REPULSION SOLVER\"),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f<l.length-1;f++){s=h[l[f]];for(var p=f+1;p<l.length;p++)t=(a=h[l[p]]).x-s.x,e=a.y-s.y,0===(i=Math.sqrt(t*t+e*e))&&(t=i=.1*this._rng()),i<2*c&&(r=i<.5*c?1:u*i+1.3333333333333333,n=t*(r/=i),o=e*r,d[s.id].x-=n,d[s.id].y-=o,d[a.id].x+=n,d[a.id].y+=o)}}}]),t}(),rp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t,this.overlapAvoidanceFactor=Math.max(0,Math.min(1,this.options.avoidOverlap||0))}},{key:\"solve\",value:function(){for(var t=this.body.nodes,e=this.physicsBody.physicsNodeIndices,i=this.physicsBody.forces,n=this.options.nodeDistance,o=0;o<e.length-1;o++)for(var r=t[e[o]],s=o+1;s<e.length;s++){var a=t[e[s]];if(r.level===a.level){var h=n+this.overlapAvoidanceFactor*((r.shape.radius||0)/2+(a.shape.radius||0)/2),l=a.x-r.x,d=a.y-r.y,c=Math.sqrt(l*l+d*d),u=void 0;u=c<h?-Math.pow(.05*c,2)+Math.pow(.05*h,2):0,0!==c&&(u/=c);var f=l*u,p=d*u;i[r.id].x-=f,i[r.id].y-=p,i[a.id].x+=f,i[a.id].y+=p}}}}]),t}(),sp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r=this.physicsBody.physicsEdgeIndices,s=this.body.edges,a=0;a<r.length;a++)!0===(e=s[r[a]]).connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.to,n=e.edgeType.via,o=e.from,this._calculateSpringForce(i,n,.5*t),this._calculateSpringForce(n,o,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:\"_calculateSpringForce\",value:function(t,e,i){var n=t.x-e.x,o=t.y-e.y,r=Math.max(Math.sqrt(n*n+o*o),.01),s=this.options.springConstant*(i-r)/r,a=n*s,h=o*s;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}(),ap=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o,r,s,a,h,l,d=this.body.edges,c=.5,u=this.physicsBody.physicsEdgeIndices,f=this.physicsBody.physicsNodeIndices,p=this.physicsBody.forces,v=0;v<f.length;v++){var g=f[v];p[g].springFx=0,p[g].springFy=0}for(var y=0;y<u.length;y++)!0===(e=d[u[y]]).connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,n=e.from.y-e.to.y,a=0===(a=Math.sqrt(i*i+n*n))?.01:a,o=i*(s=this.options.springConstant*(t-a)/a),r=n*s,e.to.level!=e.from.level?(void 0!==p[e.toId]&&(p[e.toId].springFx-=o,p[e.toId].springFy-=r),void 0!==p[e.fromId]&&(p[e.fromId].springFx+=o,p[e.fromId].springFy+=r)):(void 0!==p[e.toId]&&(p[e.toId].x-=c*o,p[e.toId].y-=c*r),void 0!==p[e.fromId]&&(p[e.fromId].x+=c*o,p[e.fromId].y+=c*r)));s=1;for(var m=0;m<f.length;m++){var b=f[m];h=Math.min(s,Math.max(-s,p[b].springFx)),l=Math.min(s,Math.max(-s,p[b].springFy)),p[b].x+=h,p[b].y+=l}for(var w=0,k=0,_=0;_<f.length;_++){var x=f[_];w+=p[x].x,k+=p[x].y}for(var E=w/f.length,O=k/f.length,C=0;C<f.length;C++){var S=f[C];p[S].x-=E,p[S].y-=O}}}]),t}(),hp=function(){function t(e,i,n){Nn(this,t),this.body=e,this.physicsBody=i,this.setOptions(n)}return Fn(t,[{key:\"setOptions\",value:function(t){this.options=t}},{key:\"solve\",value:function(){for(var t,e,i,n,o=this.body.nodes,r=this.physicsBody.physicsNodeIndices,s=this.physicsBody.forces,a=0;a<r.length;a++){t=-(n=o[r[a]]).x,e=-n.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,s,n)}}},{key:\"_calculateForces\",value:function(t,e,i,n,o){var r=0===t?0:this.options.centralGravity/t;n[o.id].x=e*r,n[o.id].y=i*r}}]),t}();function lp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var dp=function(t){Ad(i,t);var e=lp(i);function i(t,n,o){var r;return Nn(this,i),(r=e.call(this,t,n,o))._rng=ah(\"FORCE ATLAS 2 BASED REPULSION SOLVER\"),r}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){0===t&&(e=t=.1*this._rng()),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=n.edges.length+1,s=this.options.gravitationalConstant*o.mass*n.options.mass*r/Math.pow(t,2),a=e*s,h=i*s;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=h}}]),i}(np);function cp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var up=function(t){Ad(i,t);var e=cp(i);function i(t,n,o){return Nn(this,i),e.call(this,t,n,o)}return Fn(i,[{key:\"_calculateForces\",value:function(t,e,i,n,o){if(t>0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(hp),fp=function(){function t(e){Nn(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:\"barnesHut\",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},At(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"initPhysics\",(function(){t.initPhysics()})),this.body.emitter.on(\"_layoutFailed\",(function(){t.layoutFailed=!0})),this.body.emitter.on(\"resetPhysics\",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on(\"disablePhysics\",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on(\"restorePhysics\",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"startSimulation\",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on(\"stopSimulation\",(function(){t.stopSimulation()})),this.body.emitter.on(\"destroy\",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on(\"_dataChanged\",(function(){t.updatePhysicsData()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Oh([\"stabilization\"],this.options,t),$h(this.options,t,\"stabilization\"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&((\"number\"!=typeof e.x||yd(e.x))&&(e.x=0),(\"number\"!=typeof e.y||yd(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:\"init\",value:function(){var t;\"forceAtlas2Based\"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new dp(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new up(this.body,this.physicsBody,t)):\"repulsion\"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new op(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):\"hierarchicalRepulsion\"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new rp(this.body,this.physicsBody,t),this.edgesSolver=new ap(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new np(this.body,this.physicsBody,t),this.edgesSolver=new sp(this.body,this.physicsBody,t),this.gravitySolver=new hp(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:\"initPhysics\",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit(\"fit\",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit(\"fit\"))}},{key:\"startSimulation\",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit(\"_resizeNodes\"),void 0===this.viewFunction&&(this.viewFunction=Vt(t=this.simulationStep).call(t,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\"))):this.body.emitter.emit(\"_redraw\")}},{key:\"stopSimulation\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit(\"_stopRendering\"))}},{key:\"simulationStep\",value:function(){var t=No();this.physicsTick(),(No()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:\"_emitStabilized\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&rs((function(){t.body.emitter.emit(\"stabilized\",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:\"physicsStep\",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:\"adjustTimeStep\",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:\"physicsTick\",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled)this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1;else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:\"updatePhysicsData\",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&!0===e[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var r=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[r]={x:0,y:0},void 0===this.physicsBody.velocities[r]&&(this.physicsBody.velocities[r]={x:0,y:0})}for(var s in this.physicsBody.velocities)void 0===t[s]&&delete this.physicsBody.velocities[s]}},{key:\"revert\",value:function(){var t=zo(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<t.length;n++){var o=t[n];void 0!==e[o]?!0===e[o].options.physics&&(this.referenceState[o]={positions:{x:e[o].x,y:e[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,e[o].x=this.previousStates[o].x,e[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:\"_evaluateStepQuality\",value:function(){var t,e,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(Object.prototype.hasOwnProperty.call(this.referenceState,o)&&void 0!==i[o]&&(t=i[o].x-n[o].positions.x,e=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:\"moveNodes\",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;n<t.length;n++){var o=t[n],r=this._performStep(o);e=Math.max(e,r),i+=r}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:\"calculateComponentVelocity\",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(t)>n&&(t=t>0?n:-n),t}},{key:\"_performStep\",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:\"_freezeNodes\",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:\"_restoreFrozenNodes\",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:\"stabilize\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;\"number\"!=typeof e&&(e=this.options.stabilization.iterations,console.error(\"The stabilize method needs a numeric amount of iterations. Switching to default: \",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit(\"_resizeNodes\"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit(\"_blockRedraw\"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,rs((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:\"_startStabilizing\",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit(\"startStabilizing\"),this.startedStabilization=!0,!0)}},{key:\"_stabilizationBatch\",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit(\"stabilizationProgress\",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var n,o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;(i(),e())?rs(Vt(n=this._stabilizationBatch).call(n,this),0):this._finalizeStabilization()}},{key:\"_finalizeStabilization\",value:function(){this.body.emitter.emit(\"_allowRedraw\"),!0===this.options.stabilization.fit&&this.body.emitter.emit(\"fit\"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit(\"stabilizationIterationsDone\"),this.body.emitter.emit(\"_requestRedraw\"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:\"_drawForces\",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],n=this.body.nodes[i],o=this.physicsBody.forces[i],r=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),s=Math.min(Math.max(5,r),15),a=3*s,h=Vh((180-180*Math.min(1,Math.max(0,.03*r)))/360,1,1),l={x:n.x+20*o.x,y:n.y+20*o.y};t.lineWidth=s,t.strokeStyle=h,t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(l.x,l.y),t.stroke();var d=Math.atan2(o.y,o.x);t.fillStyle=h,jf.draw(t,{type:\"arrow\",point:l,angle:d,length:a}),hs(t).call(t)}}}]),t}(),pp=function(){function t(){Nn(this,t)}return Fn(t,null,[{key:\"getRange\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),s<e.shape.boundingBox.right&&(s=e.shape.boundingBox.right),n>e.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o<e.shape.boundingBox.bottom&&(o=e.shape.boundingBox.bottom);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"getRangeCore\",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)r>(e=t[i[a]]).x&&(r=e.x),s<e.x&&(s=e.x),n>e.y&&(n=e.y),o<e.y&&(o=e.y);return 1e9===r&&-1e9===s&&1e9===n&&-1e9===o&&(n=0,o=0,r=0,s=0),{minX:r,maxX:s,minY:n,maxY:o}}},{key:\"findCenter\",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:\"cloneOptions\",value:function(t,e){var i={};return void 0===e||\"node\"===e?(Ch(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):Ch(i,t.options,!0),i}}]),t}();function vp(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var gp=function(t){Ad(i,t);var e=vp(i);function i(t,n,o,r,s,a){var h;return Nn(this,i),(h=e.call(this,t,n,o,r,s,a)).isCluster=!0,h.containedNodes={},h.containedEdges={},h}return Fn(i,[{key:\"_openChildCluster\",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error(\"node with id: \"+t+\" not in current cluster\");if(!i.isCluster)throw new Error(\"node with id: \"+t+\" is not a cluster\");delete this.containedNodes[t],Dh(i.edges,(function(t){delete e.containedEdges[t.id]})),Dh(i.containedNodes,(function(t,i){e.containedNodes[i]=t})),i.containedNodes={},Dh(i.containedEdges,(function(t,i){e.containedEdges[i]=t})),i.containedEdges={},Dh(i.edges,(function(t){Dh(e.edges,(function(i){var n,o,r=Hr(n=i.clusteringEdgeReplacingIds).call(n,t.id);-1!==r&&(Dh(t.clusteringEdgeReplacingIds,(function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id})),er(o=i.clusteringEdgeReplacingIds).call(o,r,1))}))})),i.edges=[]}}]),i}(cf),yp=function(){function t(e){var i=this;Nn(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},At(this.options,this.defaultOptions),this.body.emitter.on(\"_resetData\",(function(){i.clusteredNodes={},i.clusteredEdges={}}))}return Fn(t,[{key:\"clusterByHubsize\",value:function(t,e){void 0===t?t=this._getHubSize():\"object\"===go(t)&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=t&&i.push(o.id)}for(var r=0;r<i.length;r++)this.clusterByConnection(i[r],e,!0);this.body.emitter.emit(\"_dataChanged\")}},{key:\"cluster\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");e=this._checkOptions(e);var n={},o={};Dh(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,Dh(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:\"clusterByEdgeCount\",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(n){var l={},d={},c=i.body.nodeIndices[n],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f<u.edges.length;f++)o=u.edges[f],void 0===i.clusteredEdges[o.id]&&(o.toId!==o.fromId&&s++,r.push(o));if(s===t){for(var p=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=pp.cloneOptions(t);return e.joinCondition(i)},v=!0,g=0;g<r.length;g++){o=r[g];var y=i._getConnectedId(o,c);if(!p(u)){v=!1;break}d[o.id]=o,l[c]=u,l[y]=i.body.nodes[y],h[c]=!0}if(zo(l).length>0&&zo(d).length>0&&!0===v){var m=function(){for(var t=0;t<a.length;++t)for(var e in l)if(void 0!==a[t].nodes[e])return a[t]}();if(void 0!==m){for(var b in l)void 0===m.nodes[b]&&(m.nodes[b]=l[b]);for(var w in d)void 0===m.edges[w]&&(m.edges[w]=d[w])}else a.push({nodes:l,edges:d})}}}},d=0;d<this.body.nodeIndices.length;d++)l(d);for(var c=0;c<a.length;c++)this._cluster(a[c].nodes,a[c].edges,e,!1);!0===n&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"clusterOutliers\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:\"clusterBridges\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:\"clusterByConnection\",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No nodeId supplied to clusterByConnection!\");if(void 0===this.body.nodes[t])throw new Error(\"The nodeId given to clusterByConnection does not exist!\");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=pp.cloneOptions(o);r[a]=o;for(var l=0;l<o.edges.length;l++){var d=o.edges[l];if(void 0===this.clusteredEdges[d.id]){var c=this._getConnectedId(d,a);if(void 0===this.clusteredNodes[c])if(c!==a)if(void 0===e.joinCondition)s[d.id]=d,r[c]=this.body.nodes[c];else{var u=pp.cloneOptions(this.body.nodes[c]);!0===e.joinCondition(h,u)&&(s[d.id]=d,r[c]=this.body.nodes[c])}else s[d.id]=d}}var f=Io(i=zo(r)).call(i,(function(t){return r[t].id}));for(var p in r)if(Object.prototype.hasOwnProperty.call(r,p))for(var v=r[p],g=0;g<v.edges.length;g++){var y=v.edges[g];Hr(f).call(f,this._getConnectedId(y,v.id))>-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:\"_createClusterEdges\",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=zo(t),c=[],u=0;u<d.length;u++){s=t[r=d[u]];for(var f=0;f<s.edges.length;f++)o=s.edges[f],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?e[o.id]=o:o.toId==r?(a=i.id,l=h=o.fromId):(a=o.toId,h=i.id,l=a),void 0===t[l]&&c.push({edge:o,fromId:h,toId:a}))}for(var p=[],v=function(t){for(var e=0;e<p.length;e++){var i=p[e],n=t.fromId===i.fromId&&t.toId===i.toId,o=t.fromId===i.toId&&t.toId===i.fromId;if(n||o)return i}return null},g=0;g<c.length;g++){var y=c[g],m=y.edge,b=v(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),p.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:\"_checkOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:\"_cluster\",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;s<o.length;++s)delete t[o[s]];if(0!=zo(t).length&&(1!=zo(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var a=Ch({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var d=pp.cloneOptions(t[l]);h.push(d)}var c=[];for(var u in e)if(Object.prototype.hasOwnProperty.call(e,u)&&\"clusterEdge:\"!==u.substr(0,12)){var f=pp.cloneOptions(e[u],\"edge\");c.push(f)}if(!(a=i.processProperties(a,h,c)))throw new Error(\"The processProperties function does not return properties!\")}void 0===a.id&&(a.id=\"cluster:\"+Wc());var p=a.id;void 0===a.label&&(a.label=\"cluster\");var v=void 0;void 0===a.x&&(v=this._getClusterPosition(t),a.x=v.x),void 0===a.y&&(void 0===v&&(v=this._getClusterPosition(t)),a.y=v.y),a.id=p;var g=this.body.functions.createNode(a,gp);g.containedNodes=t,g.containedEdges=e,g.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[a.id]=g,this._clusterEdges(t,e,a,i.clusterEdgeProperties),a.id=void 0,!0===n&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"_backupEdgeOptions\",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:\"_restoreEdge\",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:\"isCluster\",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.error(\"Node does not exist.\"),!1)}},{key:\"_getClusterPosition\",value:function(t){for(var e,i=zo(t),n=t[i[0]].x,o=t[i[0]].x,r=t[i[0]].y,s=t[i[0]].y,a=1;a<i.length;a++)n=(e=t[i[a]]).x<n?e.x:n,o=e.x>o?e.x:o,r=e.y<r?e.y:r,s=e.y>s?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:\"openCluster\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error(\"No clusterNodeId supplied to openCluster.\");var n=this.body.nodes[t];if(void 0===n)throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error(\"The node:\"+t+\" is not a valid cluster.\");var o=this.findNode(t),r=Hr(o).call(o,t)-1;if(r>=0){var s=o[r],a=this.body.nodes[s];return a._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit(\"_dataChanged\"))}var h=n.containedNodes,l=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&\"function\"==typeof e.releaseFunction){var d={},c={x:n.x,y:n.y};for(var u in h)if(Object.prototype.hasOwnProperty.call(h,u)){var f=this.body.nodes[u];d[u]={x:f.x,y:f.y}}var p=e.releaseFunction(c,d);for(var v in h)if(Object.prototype.hasOwnProperty.call(h,v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else Dh(h,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var y in h)if(Object.prototype.hasOwnProperty.call(h,y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],w=0;w<n.edges.length;w++)b.push(n.edges[w]);for(var k=0;k<b.length;k++){for(var _=b[k],x=this._getConnectedId(_,t),E=this.clusteredNodes[x],O=0;O<_.clusteringEdgeReplacingIds.length;O++){var C=_.clusteringEdgeReplacingIds[O],S=this.body.edges[C];if(void 0!==S)if(void 0!==E){var T=this.body.nodes[E.clusterId];T.containedEdges[S.id]=S,delete l[S.id];var M=S.fromId,P=S.toId;S.toId==x?P=E.clusterId:M=E.clusterId,this._createClusteredEdge(M,P,S,T.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}_.remove()}for(var D in l)Object.prototype.hasOwnProperty.call(l,D)&&this._restoreEdge(l[D]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit(\"_dataChanged\")}},{key:\"getNodesInCluster\",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&e.push(this.body.nodes[n].id)}return e}},{key:\"findNode\",value:function(t){for(var e,i=[],n=0;void 0!==this.clusteredNodes[t]&&n<100;){if(void 0===(e=this.body.nodes[t]))return[];i.push(e.id),t=this.clusteredNodes[t].clusterId,n++}return void 0===(e=this.body.nodes[t])?[]:(i.push(e.id),Xo(i).call(i),i)}},{key:\"updateClusteredNode\",value:function(t,e){if(void 0===t)throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateClusteredNode.\");if(void 0===this.body.nodes[t])throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");this.body.nodes[t].setOptions(e),this.body.emitter.emit(\"_dataChanged\")}},{key:\"updateEdge\",value:function(t,e){if(void 0===t)throw new Error(\"No startEdgeId supplied to updateEdge.\");if(void 0===e)throw new Error(\"No newOptions supplied to updateEdge.\");if(void 0===this.body.edges[t])throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");for(var i=this.getClusteredEdges(t),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(e)}this.body.emitter.emit(\"_dataChanged\")}},{key:\"getClusteredEdges\",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return Xo(e).call(e),e}},{key:\"getBaseEdge\",value:function(t){return this.getBaseEdges(t)[0]}},{key:\"getBaseEdges\",value:function(t){for(var e=[t],i=[],n=[],o=0;e.length>0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;h<a.length;++h){var l=a[h];-1===Hr(e).call(e,a)&&-1===Hr(i).call(i,a)&&e.push(l)}i.push(r)}}}return n}},{key:\"_getConnectedId\",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:\"_getHubSize\",value:function(){for(var t=0,e=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var r=this.body.nodes[this.body.nodeIndices[o]];r.edges.length>n&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:\"_createClusteredEdge\",value:function(t,e,i,n,o){var r=pp.cloneOptions(i,\"edge\");Ch(r,n),r.from=t,r.to=e,r.id=\"clusterEdge:\"+Wc(),void 0!==o&&Ch(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:\"_clusterEdges\",value:function(t,e,i,n){if(e instanceof ep){var o=e,r={};r[o.id]=o,e=r}if(t instanceof cf){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error(\"_clusterEdges: parameter clusterNode required\");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:\"_getClusterNodeForNode\",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:\"_filter\",value:function(t,e){var i=[];return Dh(t,(function(t){e(t)&&i.push(t)})),i}},{key:\"_updateState\",value:function(){var t,e=this,i=[],n={},o=function(t){Dh(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]}));for(var r=0;r<i.length;r++)delete this.clusteredNodes[i[r]];Dh(this.clusteredEdges,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||(n[t]=t)})),o((function(t){Dh(t.containedEdges,(function(t,e){t.endPointsValid()||n[e]||(n[e]=e)}))})),Dh(this.body.edges,(function(t,i){var o=!0,r=t.clusteringEdgeReplacingIds;if(void 0!==r){var s=0;Dh(r,(function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(s+=1)})),o=s>0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){Dh(n,(function(i){delete t.containedEdges[i],Dh(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),Dh(n,(function(t){delete e.clusteredEdges[t]})),Dh(n,(function(t){delete e.body.edges[t]})),Dh(zo(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=zo(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);a=t.length>0,s=s||a};a;)h();s&&this._updateState()}},{key:\"_isClusteredNode\",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:\"_isClusteredEdge\",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();function mp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return bp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function bp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var wp=function(){function t(e,i){var n;Nn(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},At(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.on(\"dragStart\",(function(){e.dragging=!0})),this.body.emitter.on(\"dragEnd\",(function(){e.dragging=!1})),this.body.emitter.on(\"zoom\",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=rs((function(){var t;e.zooming=!1,Vt(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on(\"_resizeNodes\",(function(){e._resizeNodes()})),this.body.emitter.on(\"_redraw\",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on(\"_blockRedraw\",(function(){e.allowRedraw=!1})),this.body.emitter.on(\"_allowRedraw\",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on(\"_requestRedraw\",Vt(t=this._requestRedraw).call(t,this)),this.body.emitter.on(\"_startRendering\",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on(\"_stopRendering\",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on(\"destroy\",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\"],this.options,t)}}},{key:\"_requestNextFrame\",value:function(t,e){if(\"undefined\"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=rs(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:\"_startRendering\",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Vt(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:\"_renderStep\",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:\"redraw\",value:function(){this.body.emitter.emit(\"setSize\"),this._redraw()}},{key:\"_requestRedraw\",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:\"_redraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit(\"initRedraw\"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit(\"beforeDrawing\",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t),s=r.drawExternalLabels;e.drawExternalLabels=s}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit(\"afterDrawing\",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:\"_resizeNodes\",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:\"_drawNodes\",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=20,l=this.canvas.DOMtoCanvas({x:-h,y:-h}),d=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+h,y:this.canvas.frame.canvas.clientHeight+h}),c={top:l.y,left:l.x,bottom:d.y,right:d.x},u=[],f=0;f<r.length;f++)if((e=o[r[f]]).hover)a.push(r[f]);else if(e.isSelected())s.push(r[f]);else if(!0===n){var p=e.draw(t);null!=p.drawExternalLabel&&u.push(p.drawExternalLabel)}else if(!0===e.isBoundingBoxOverlappingWith(c)){var v=e.draw(t);null!=v.drawExternalLabel&&u.push(v.drawExternalLabel)}else e.updateBoundingBox(t,e.selected);var g=s.length,y=a.length;for(i=0;i<g;i++){var m=(e=o[s[i]]).draw(t);null!=m.drawExternalLabel&&u.push(m.drawExternalLabel)}for(i=0;i<y;i++){var b=(e=o[a[i]]).draw(t);null!=b.drawExternalLabel&&u.push(b.drawExternalLabel)}return{drawExternalLabels:function(){var t,e=mp(u);try{for(e.s();!(t=e.n()).done;){(0,t.value)()}}catch(t){e.e(t)}finally{e.f()}}}}},{key:\"_drawEdges\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.draw(t)}}},{key:\"_drawArrows\",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,n=0;n<i.length;n++){var o=e[i[n]];!0===o.connected&&o.drawArrows(t)}}},{key:\"_determineBrowserMethod\",value:function(){if(\"undefined\"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,(-1!=Hr(t).call(t,\"msie 9.0\")||-1!=Hr(t).call(t,\"safari\")&&Hr(t).call(t,\"chrome\")<=-1)&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}},{key:\"_drawSelectionBox\",value:function(t){if(this.body.selectionBox.show){t.beginPath();var e=this.body.selectionBox.position.end.x-this.body.selectionBox.position.start.x,i=this.body.selectionBox.position.end.y-this.body.selectionBox.position.start.y;t.rect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.fillStyle=\"rgba(151, 194, 252, 0.2)\",t.fillRect(this.body.selectionBox.position.start.x,this.body.selectionBox.position.start.y,e,i),t.strokeStyle=\"rgba(151, 194, 252, 1)\",t.stroke()}else t.closePath()}}]),t}(),kp=k.setInterval;function _p(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on(\"hammer.input\",e.inputHandler)}function xp(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on(\"hammer.input\",e.inputHandler)}var Ep=function(){function t(e){Nn(this,t),this.body=e,this.pixelRatio=1,this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this._cleanupCallbacks=[],this.options={},this.defaultOptions={autoResize:!0,height:\"100%\",width:\"100%\"},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t,e=this;this.body.emitter.once(\"resize\",(function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)})),this.body.emitter.on(\"setSize\",Vt(t=this.setSize).call(t,this)),this.body.emitter.on(\"destroy\",(function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()}))}},{key:\"setOptions\",value:function(t){var e=this;if(void 0!==t){Eh([\"width\",\"height\",\"autoResize\"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var i;if(window.ResizeObserver){var n=new ResizeObserver((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")})),o=this.frame;n.observe(o),this._cleanupCallbacks.push((function(){n.unobserve(o)}))}else{var r=kp((function(){!0===e.setSize()&&e.body.emitter.emit(\"_requestRedraw\")}),1e3);this._cleanupCallbacks.push((function(){clearInterval(r)}))}var s=Vt(i=this._onResize).call(i,this);Bh(window,\"resize\",s),this._cleanupCallbacks.push((function(){zh(window,\"resize\",s)}))}}},{key:\"_cleanUp\",value:function(){var t,e,i;Wo(t=Xo(e=er(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(function(t){try{t()}catch(t){console.error(t)}}))}},{key:\"_onResize\",value:function(){this.setSize(),this.body.emitter.emit(\"_redraw\")}},{key:\"_getCameraState\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:\"_setCameraState\",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:\"_prepareValue\",value:function(t){if(\"number\"==typeof t)return t+\"px\";if(\"string\"==typeof t){if(-1!==Hr(t).call(t,\"%\")||-1!==Hr(t).call(t,\"px\"))return t;if(-1===Hr(t).call(t,\"%\"))return t+\"px\"}throw new Error(\"Could not use the value supplied for width or height:\"+t)}},{key:\"_create\",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement(\"div\"),this.frame.className=\"vis-network\",this.frame.style.position=\"relative\",this.frame.style.overflow=\"hidden\",this.frame.tabIndex=0,this.frame.canvas=document.createElement(\"canvas\"),this.frame.canvas.style.position=\"relative\",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement(\"DIV\");t.style.color=\"red\",t.style.fontWeight=\"bold\",t.style.padding=\"10px\",t.innerText=\"Error: your browser does not support HTML canvas\",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:\"_bindHammer\",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new ll(this.frame.canvas),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.get(\"pan\").set({threshold:5,direction:ll.DIRECTION_ALL}),_p(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on(\"tap\",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on(\"doubletap\",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on(\"press\",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on(\"panstart\",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on(\"panmove\",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on(\"panend\",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on(\"pinch\",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener(\"wheel\",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener(\"mousemove\",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener(\"contextmenu\",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new ll(this.frame),xp(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:\"setSize\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width=\"100%\",this.frame.canvas.style.height=\"100%\",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit(\"resize\",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:\"getContext\",value:function(){return this.frame.canvas.getContext(\"2d\")}},{key:\"_determinePixelRatio\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");var e=1;return\"undefined\"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:\"_setPixelRatio\",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:\"setTransform\",value:function(){var t=this.getContext();if(void 0===t)throw new Error(\"Could not get canvax context\");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:\"_XconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:\"_XconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:\"_YconvertDOMtoCanvas\",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:\"_YconvertCanvasToDOM\",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:\"canvasToDOM\",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:\"DOMtoCanvas\",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();function Op(t,e){var i=At({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!So(i.nodes))throw new TypeError(\"Nodes has to be an array of ids.\");if(0===i.nodes.length&&(i.nodes=e),!(\"number\"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError(\"Min zoom level has to be a number higher than zero.\");if(!(\"number\"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError(\"Max zoom level has to be a number higher than min zoom level.\");return i}var Cp=function(){function t(e,i){var n,o,r=this;Nn(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction=\"easeInOutQuint\",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on(\"fit\",Vt(n=this.fit).call(n,this)),this.body.emitter.on(\"animationFinished\",(function(){r.body.emitter.emit(\"_stopRendering\")})),this.body.emitter.on(\"unlockNode\",Vt(o=this.releaseNode).call(o,this))}return Fn(t,[{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:\"fit\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=Op(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=pp.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,a)){var h=this.body.nodes[a];!0===h.predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=pp.getRange(this.body.nodes,t.nodes);var l=this.body.nodeIndices.length;n=12.662/(l+7.4147)+.0964822;var d=Math.min(o/600,r/600);n*=d}else{this.body.emitter.emit(\"_resizeNodes\"),i=pp.getRange(this.body.nodes,t.nodes);var c=1.1*Math.abs(i.maxX-i.minX),u=1.1*Math.abs(i.maxY-i.minY),f=o/c,p=r/u;n=f<=p?f:p}n>t.maxZoomLevel?n=t.maxZoomLevel:n<t.minZoomLevel&&(n=t.minZoomLevel);var v=pp.findCenter(i),g={position:v,scale:n,animation:t.animation};this.moveTo(g)}},{key:\"focus\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error(\"Node: \"+t+\" cannot be found.\")}},{key:\"moveTo\",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!wd(t.offset.x))throw new TypeError('The option \"offset.x\" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!wd(t.offset.y))throw new TypeError('The option \"offset.y\" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!wd(t.position.x))throw new TypeError('The option \"position.x\" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!wd(t.position.y))throw new TypeError('The option \"position.y\" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option \"scale\" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction=\"easeInOutQuad\"),this.animateView(t)}else t={}}},{key:\"animateView\",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Vt(e=this._lockedRedraw).call(e,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit(\"_requestRedraw\");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Vt(i=this._transitionRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction),this.body.emitter.emit(\"_startRendering\")}}},{key:\"_lockedRedraw\",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:\"releaseNode\",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:\"_transitionRedraw\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=Zh[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off(\"initRedraw\",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Vt(i=this._lockedRedraw).call(i,this),this.body.emitter.on(\"initRedraw\",this.viewFunction);this.body.emitter.emit(\"animationFinished\")}}},{key:\"getScale\",value:function(){return this.body.view.scale}},{key:\"getViewPosition\",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function Sp(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[\"\"+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s[\"F\"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s[\"num\"+e]={code:96+e,shift:!1};s[\"num*\"]={code:106,shift:!1},s[\"num+\"]={code:107,shift:!1},s[\"num-\"]={code:109,shift:!1},s[\"num/\"]={code:111,shift:!1},s[\"num.\"]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s[\"=\"]={code:187,shift:!1},s[\"-\"]={code:189,shift:!1},s[\"]\"]={code:221,shift:!1},s[\"[\"]={code:219,shift:!1};var a=function(t){l(t,\"keydown\")},h=function(t){l(t,\"keyup\")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o<n.length;o++)(void 0===n[o].shift||1==n[o].shift&&1==t.shiftKey||0==n[o].shift&&0==t.shiftKey)&&n[o].fn(t);1==i&&t.preventDefault()}};return o.bind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);void 0===r[i][s[t].code]&&(r[i][s[t].code]=[]),r[i][s[t].code].push({fn:e,shift:s[t].shift})},o.bindAll=function(t,e){for(var i in void 0===e&&(e=\"keydown\"),s)s.hasOwnProperty(i)&&o.bind(i,t,e)},o.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&\"shift\"==e)return e}return\"unknown key, currently not supported\"},o.unbind=function(t,e,i){if(void 0===i&&(i=\"keydown\"),void 0===s[t])throw new Error(\"unsupported key: \"+t);if(void 0!==e){var n=[],o=r[i][s[t].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==e&&o[a].shift==s[t].shift||n.push(r[i][s[t].code][a]);r[i][s[t].code]=n}else r[i][s[t].code]=[]},o.reset=function(){r={keydown:{},keyup:{}}},o.destroy=function(){r={keydown:{},keyup:{}},n.removeEventListener(\"keydown\",a,!0),n.removeEventListener(\"keyup\",h,!0)},n.addEventListener(\"keydown\",a,!0),n.addEventListener(\"keyup\",h,!0),o}var Tp=Object.freeze({__proto__:null,default:Sp}),Mp=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on(\"activate\",(function(){n.activated=!0,n.configureKeyboardBindings()})),this.body.emitter.on(\"deactivate\",(function(){n.activated=!1,n.configureKeyboardBindings()})),this.body.emitter.on(\"destroy\",(function(){void 0!==n.keycharm&&n.keycharm.destroy()})),this.options={}}return Fn(t,[{key:\"setOptions\",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:\"create\",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:\"cleanNavigation\",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:\"loadNavigationElements\",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=[\"up\",\"down\",\"left\",\"right\",\"zoomIn\",\"zoomOut\",\"zoomExtends\"],i=[\"_moveUp\",\"_moveDown\",\"_moveLeft\",\"_moveRight\",\"_zoomIn\",\"_zoomOut\",\"_fit\"];this.navigationDOM.wrapper=document.createElement(\"div\"),this.navigationDOM.wrapper.className=\"vis-navigation\",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<e.length;n++){this.navigationDOM[e[n]]=document.createElement(\"div\"),this.navigationDOM[e[n]].className=\"vis-button vis-\"+e[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[n]]);var o,r,s=new ll(this.navigationDOM[e[n]]);if(\"_fit\"===i[n])_p(s,Vt(o=this._fit).call(o,this));else _p(s,Vt(r=this.bindToRedraw).call(r,this,i[n]));this.navigationHammers.push(s)}var a=new ll(this.canvas.frame);xp(a,(function(){t._stopMovement()})),this.navigationHammers.push(a),this.iconsCreated=!0}},{key:\"bindToRedraw\",value:function(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Vt(e=this[t]).call(e,this),this.body.emitter.on(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_startRendering\"))}},{key:\"unbindFromRedraw\",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"),delete this.boundFunctions[t])}},{key:\"_fit\",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit(\"fit\",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:\"_stopMovement\",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off(\"initRedraw\",this.boundFunctions[t]),this.body.emitter.emit(\"_stopRendering\"));this.boundFunctions={}}},{key:\"_moveUp\",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:\"_moveDown\",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:\"_moveLeft\",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:\"_moveRight\",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:\"_zoomIn\",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:null})}},{key:\"_zoomOut\",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:null})}},{key:\"configureKeyboardBindings\",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=Sp({container:window,preventDefault:!0}):this.keycharm=Sp({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Vt(t=this.keycharm).call(t,\"up\",(function(){E.bindToRedraw(\"_moveUp\")}),\"keydown\"),Vt(e=this.keycharm).call(e,\"down\",(function(){E.bindToRedraw(\"_moveDown\")}),\"keydown\"),Vt(i=this.keycharm).call(i,\"left\",(function(){E.bindToRedraw(\"_moveLeft\")}),\"keydown\"),Vt(n=this.keycharm).call(n,\"right\",(function(){E.bindToRedraw(\"_moveRight\")}),\"keydown\"),Vt(o=this.keycharm).call(o,\"=\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(r=this.keycharm).call(r,\"num+\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(s=this.keycharm).call(s,\"num-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(a=this.keycharm).call(a,\"-\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(h=this.keycharm).call(h,\"[\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(l=this.keycharm).call(l,\"]\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(d=this.keycharm).call(d,\"pageup\",(function(){E.bindToRedraw(\"_zoomIn\")}),\"keydown\"),Vt(c=this.keycharm).call(c,\"pagedown\",(function(){E.bindToRedraw(\"_zoomOut\")}),\"keydown\"),Vt(u=this.keycharm).call(u,\"up\",(function(){E.unbindFromRedraw(\"_moveUp\")}),\"keyup\"),Vt(f=this.keycharm).call(f,\"down\",(function(){E.unbindFromRedraw(\"_moveDown\")}),\"keyup\"),Vt(p=this.keycharm).call(p,\"left\",(function(){E.unbindFromRedraw(\"_moveLeft\")}),\"keyup\"),Vt(v=this.keycharm).call(v,\"right\",(function(){E.unbindFromRedraw(\"_moveRight\")}),\"keyup\"),Vt(g=this.keycharm).call(g,\"=\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(y=this.keycharm).call(y,\"num+\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(m=this.keycharm).call(m,\"num-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(b=this.keycharm).call(b,\"-\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(w=this.keycharm).call(w,\"[\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\"),Vt(k=this.keycharm).call(k,\"]\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(_=this.keycharm).call(_,\"pageup\",(function(){E.unbindFromRedraw(\"_zoomIn\")}),\"keyup\"),Vt(x=this.keycharm).call(x,\"pagedown\",(function(){E.unbindFromRedraw(\"_zoomOut\")}),\"keyup\")))}}]),t}();function Pp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Dp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Dp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Dp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ip=function(){function t(e,i,n){var o,r,s,a,h,l,d,c,u,f,p,v,g;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new Mp(e,i),this.body.eventListeners.onTap=Vt(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Vt(r=this.onTouch).call(r,this),this.body.eventListeners.onDoubleTap=Vt(s=this.onDoubleTap).call(s,this),this.body.eventListeners.onHold=Vt(a=this.onHold).call(a,this),this.body.eventListeners.onDragStart=Vt(h=this.onDragStart).call(h,this),this.body.eventListeners.onDrag=Vt(l=this.onDrag).call(l,this),this.body.eventListeners.onDragEnd=Vt(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Vt(c=this.onMouseWheel).call(c,this),this.body.eventListeners.onPinch=Vt(u=this.onPinch).call(u,this),this.body.eventListeners.onMouseMove=Vt(f=this.onMouseMove).call(f,this),this.body.eventListeners.onRelease=Vt(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Vt(v=this.onContext).call(v,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Vt(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"destroy\",(function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer}))}},{key:\"setOptions\",value:function(t){if(void 0!==t){Oh([\"hideEdgesOnDrag\",\"hideEdgesOnZoom\",\"hideNodesOnDrag\",\"keyboard\",\"multiselect\",\"selectable\",\"selectConnectedEdges\"],this.options,t),$h(this.options,t,\"keyboard\"),t.tooltip&&(At(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Rh(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:\"getPointer\",value:function(t){return{x:t.x-Mh(this.canvas.frame.canvas),y:t.y-Ph(this.canvas.frame.canvas)}}},{key:\"onTouch\",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:\"onTap\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e)}},{key:\"onDoubleTap\",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"doubleClick\",t,e)}},{key:\"onHold\",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent(\"click\",t,e),this.selectionHandler.generateClickEvent(\"hold\",t,e)}},{key:\"onRelease\",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent(\"release\",t,e),this.touchTime=(new Date).valueOf()}}},{key:\"onContext\",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent(\"oncontext\",t,e)}},{key:\"checkSelectionChanges\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];!0===e?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:\"_determineDifference\",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n<t.length;n++){var o=t[n];-1===Hr(e).call(e,o)&&i.push(o)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:\"onDragStart\",value:function(t){if(!this.drag.dragging){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=At({},this.body.view.translation),this.drag.nodeId=void 0,t.srcEvent.shiftKey){this.body.selectionBox.show=!0;var i=this.getPointer(t.center);this.body.selectionBox.position.start={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)}}if(void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer);var n,o=Pp(this.selectionHandler.getSelectedNodes());try{for(o.s();!(n=o.n()).done;){var r=n.value,s={id:r.id,node:r,x:r.x,y:r.y,xFixed:r.options.fixed.x,yFixed:r.options.fixed.y};r.options.fixed.x=!0,r.options.fixed.y=!0,this.drag.selection.push(s)}}catch(t){o.e(t)}finally{o.f()}}else this.selectionHandler.generateClickEvent(\"dragStart\",t,this.drag.pointer,void 0,!0)}}},{key:\"onDrag\",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit(\"unlockNode\");var i=this.getPointer(t.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler.generateClickEvent(\"dragging\",t,i);var o=i.x-this.drag.pointer.x,r=i.y-this.drag.pointer.y;Wo(n).call(n,(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+r))})),this.body.emitter.emit(\"startSimulation\")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(i.x),y:this.canvas._YconvertDOMtoCanvas(i.y)},this.body.emitter.emit(\"_requestRedraw\")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent(\"dragging\",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var s=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+s,y:this.drag.translation.y+a},this.body.emitter.emit(\"_requestRedraw\")}}}}},{key:\"onDragEnd\",value:function(t){var e=this;if(this.drag.dragging=!1,this.body.selectionBox.show){var i;this.body.selectionBox.show=!1;var n=this.body.selectionBox.position,o={minX:Math.min(n.start.x,n.end.x),minY:Math.min(n.start.y,n.end.y),maxX:Math.max(n.start.x,n.end.x),maxY:Math.max(n.start.y,n.end.y)},r=mr(i=this.body.nodeIndices).call(i,(function(t){var i=e.body.nodes[t];return i.x>=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));Wo(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\")}else{var a=this.drag.selection;a&&a.length?(Wo(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center)),this.body.emitter.emit(\"startSimulation\")):(this.selectionHandler.generateClickEvent(\"dragEnd\",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit(\"_requestRedraw\"))}}},{key:\"onPinch\",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:\"zoom\",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit(\"_requestRedraw\"),i<t?this.body.emitter.emit(\"zoom\",{direction:\"+\",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit(\"zoom\",{direction:\"-\",scale:this.body.view.scale,pointer:e})}}},{key:\"onMouseWheel\",value:function(t){if(!0===this.options.zoomView){if(0!==t.deltaY){var e=this.body.view.scale;e*=1+(t.deltaY<0?1:-1)*(.1*this.options.zoomSpeed);var i=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(e,i)}t.preventDefault()}}},{key:\"onMouseMove\",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),this.options.keyboard.autoFocus&&!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=rs((function(){return e._checkShowPopup(i)}),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:\"_checkShowPopup\",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),n={left:e,top:i,right:e,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,r=!1,s=\"node\";if(void 0===this.popupObj){for(var a,h=this.body.nodeIndices,l=this.body.nodes,d=[],c=0;c<h.length;c++)!0===(a=l[h[c]]).isOverlappingWith(n)&&(r=!0,void 0!==a.getTitle()&&d.push(h[c]));d.length>0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g<f.length;g++)!0===(u=p[f[g]]).isOverlappingWith(n)&&!0===u.connected&&void 0!==u.getTitle()&&v.push(f[g]);v.length>0&&(this.popupObj=p[v[v.length-1]],s=\"edge\")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new dl(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit(\"showPopup\",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}},{key:\"_checkHidePopup\",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if(\"node\"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit(\"hidePopup\"))}}]),t}(),Bp=Jl.getWeakData,zp=we.set,Np=we.getterFor,Ap=Gi.find,Fp=Gi.findIndex,jp=0,Rp=function(t){return t.frozen||(t.frozen=new Lp)},Lp=function(){this.entries=[]},Hp=function(t,e){return Ap(t.entries,(function(t){return t[0]===e}))};Lp.prototype={get:function(t){var e=Hp(this,t);if(e)return e[1]},has:function(t){return!!Hp(this,t)},set:function(t,e){var i=Hp(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=Fp(this.entries,(function(e){return e[0]===t}));return~e&&this.entries.splice(e,1),!!~e}};var Wp={getConstructor:function(t,e,i,n){var o=t((function(t,r){id(t,o,e),zp(t,{type:e,id:jp++,frozen:void 0}),null!=r&&ed(r,t[n],{that:t,AS_ENTRIES:i})})),r=Np(e),s=function(t,e,i){var n=r(t),o=Bp(dt(e),!0);return!0===o?Rp(n).set(e,i):o[n.id]=i,t};return hd(o.prototype,{delete:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).delete(t):i&&j(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!w(t))return!1;var i=Bp(t);return!0===i?Rp(e).has(t):i&&j(i,e.id)}}),hd(o.prototype,i?{get:function(t){var e=r(this);if(w(t)){var i=Bp(t);return!0===i?Rp(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return s(this,t,e)}}:{add:function(t){return s(this,t,!0)}}),o}};n((function(t){var e,i=we.enforce,n=!a.ActiveXObject&&\"ActiveXObject\"in a,o=Object.isExtensible,r=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},s=t.exports=ad(\"WeakMap\",r,Wp);if(ae&&n){e=Wp.getConstructor(r,\"WeakMap\",!0),Jl.enable();var h=s.prototype,l=h.delete,d=h.has,c=h.get,u=h.set;hd(h,{delete:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),l.call(this,t)||n.frozen.delete(t)}return l.call(this,t)},has:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)||n.frozen.has(t)}return d.call(this,t)},get:function(t){if(w(t)&&!o(t)){var n=i(this);return n.frozen||(n.frozen=new e),d.call(this,t)?c.call(this,t):n.frozen.get(t)}return c.call(this,t)},set:function(t,n){if(w(t)&&!o(t)){var r=i(this);r.frozen||(r.frozen=new e),d.call(this,t)?u.call(this,t,n):r.frozen.set(t,n)}else u.call(this,t,n);return this}})}}));var qp,Vp,Up,Yp,Xp,Gp=k.WeakMap;function Kp(t,e,i,n){if(\"a\"===i&&!n)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof e?t!==e||!n:!e.has(t))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===i?n:\"a\"===i?n.call(t):n?n.value:e.get(t)}function $p(t,e,i,n,o){if(\"m\"===n)throw new TypeError(\"Private method is not writable\");if(\"a\"===n&&!o)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof e?t!==e||!o:!e.has(t))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function Zp(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Qp(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qp(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Qp(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function Jp(t,e){var i,n=new ec,o=Zp(e);try{for(o.s();!(i=o.n()).done;){var r=i.value;t.has(r)||n.add(r)}}catch(t){o.e(t)}finally{o.f()}return n}var tv=function(){function t(){Nn(this,t),qp.set(this,new ec),Vp.set(this,new ec)}return Fn(t,[{key:\"size\",get:function(){return Kp(this,Vp,\"f\").size}},{key:\"add\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").add(r)}}},{key:\"delete\",value:function(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];for(var n=0,o=e;n<o.length;n++){var r=o[n];Kp(this,Vp,\"f\").delete(r)}}},{key:\"clear\",value:function(){Kp(this,Vp,\"f\").clear()}},{key:\"getSelection\",value:function(){return wo(Kp(this,Vp,\"f\"))}},{key:\"getChanges\",value:function(){return{added:wo(Jp(Kp(this,qp,\"f\"),Kp(this,Vp,\"f\"))),deleted:wo(Jp(Kp(this,Vp,\"f\"),Kp(this,qp,\"f\"))),previous:wo(new ec(Kp(this,qp,\"f\"))),current:wo(new ec(Kp(this,Vp,\"f\")))}}},{key:\"commit\",value:function(){var t=this.getChanges();$p(this,qp,Kp(this,Vp,\"f\"),\"f\"),$p(this,Vp,new ec(Kp(this,qp,\"f\")),\"f\");var e,i=Zp(t.added);try{for(i.s();!(e=i.n()).done;){e.value.select()}}catch(t){i.e(t)}finally{i.f()}var n,o=Zp(t.deleted);try{for(o.s();!(n=o.n()).done;){n.value.unselect()}}catch(t){o.e(t)}finally{o.f()}return t}}]),t}();qp=new Gp,Vp=new Gp;var ev=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};Nn(this,t),Up.set(this,new tv),Yp.set(this,new tv),Xp.set(this,void 0),$p(this,Xp,e,\"f\")}return Fn(t,[{key:\"sizeNodes\",get:function(){return Kp(this,Up,\"f\").size}},{key:\"sizeEdges\",get:function(){return Kp(this,Yp,\"f\").size}},{key:\"getNodes\",value:function(){return Kp(this,Up,\"f\").getSelection()}},{key:\"getEdges\",value:function(){return Kp(this,Yp,\"f\").getSelection()}},{key:\"addNodes\",value:function(){var t;(t=Kp(this,Up,\"f\")).add.apply(t,arguments)}},{key:\"addEdges\",value:function(){var t;(t=Kp(this,Yp,\"f\")).add.apply(t,arguments)}},{key:\"deleteNodes\",value:function(t){Kp(this,Up,\"f\").delete(t)}},{key:\"deleteEdges\",value:function(t){Kp(this,Yp,\"f\").delete(t)}},{key:\"clear\",value:function(){Kp(this,Up,\"f\").clear(),Kp(this,Yp,\"f\").clear()}},{key:\"commit\",value:function(){for(var t,e,i={nodes:Kp(this,Up,\"f\").commit(),edges:Kp(this,Yp,\"f\").commit()},n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=Kp(this,Xp,\"f\")).call.apply(t,Eo(e=[this,i]).call(e,o)),i}}]),t}();function iv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return nv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function nv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}Up=new Gp,Yp=new Gp,Xp=new Gp;var ov=function(){function t(e,i){var n=this;Nn(this,t),this.body=e,this.canvas=i,this._selectionAccumulator=new ev,this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},At(this.options,this.defaultOptions),this.body.emitter.on(\"_dataChanged\",(function(){n.updateSelection()}))}return Fn(t,[{key:\"setOptions\",value:function(t){if(void 0!==t){Eh([\"multiselect\",\"hoverConnectedEdges\",\"selectable\",\"selectConnectedEdges\"],this.options,t)}}},{key:\"selectOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit(\"_requestRedraw\")}return e}},{key:\"selectAdditionalOnPoint\",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit(\"_requestRedraw\"))}return e}},{key:\"_initBaseEvent\",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:\"generateClickEvent\",value:function(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),\"click\"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:\"selectObject\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof cf){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,wo(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:\"deselectObject\",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:\"_getAllNodesOverlappingWith\",value:function(t){for(var e=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}return e}},{key:\"_pointerToPositionObject\",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:\"getNodeAt\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:\"_getEdgesOverlappingWith\",value:function(t,e){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(t)&&e.push(o)}}},{key:\"_getAllEdgesOverlappingWith\",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:\"getEdgeAt\",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s<this.body.edgeIndices.length;s++){var a=this.body.edgeIndices[s],h=r[a];if(h.connected){var l=h.from.x,d=h.from.y,c=h.to.x,u=h.to.y,f=h.edgeType.getDistanceToEdge(l,d,c,u,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===e?this.body.edges[o]:o:void 0}},{key:\"_addToHover\",value:function(t){t instanceof cf?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:\"_removeFromSelection\",value:function(t){var e;t instanceof cf?(this._selectionAccumulator.deleteNodes(t),(e=this._selectionAccumulator).deleteEdges.apply(e,wo(t.edges))):this._selectionAccumulator.deleteEdges(t)}},{key:\"unselectAll\",value:function(){this._selectionAccumulator.clear()}},{key:\"getSelectedNodeCount\",value:function(){return this._selectionAccumulator.sizeNodes}},{key:\"getSelectedEdgeCount\",value:function(){return this._selectionAccumulator.sizeEdges}},{key:\"_hoverConnectedEdges\",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:\"emitBlurEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"blurNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"blurEdge\",n)))}},{key:\"emitHoverEvent\",value:function(t,e,i){var n=this._initBaseEvent(t,e),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof cf?(n.node=i.id,this.body.emitter.emit(\"hoverNode\",n)):(n.edge=i.id,this.body.emitter.emit(\"hoverEdge\",n))),o}},{key:\"hoverObject\",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var n=!1;for(var o in this.hoverObj.nodes)Object.prototype.hasOwnProperty.call(this.hoverObj.nodes,o)&&(void 0===i||i instanceof cf&&i.id!=o||i instanceof ep)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var r in this.hoverObj.edges)Object.prototype.hasOwnProperty.call(this.hoverObj.edges,r)&&(!0===n?(this.hoverObj.edges[r].hover=!1,delete this.hoverObj.edges[r]):(void 0===i||i instanceof ep&&i.id!=r||i instanceof cf&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[r]),delete this.hoverObj.edges[r],n=!0));if(void 0!==i){var s=zo(this.hoverObj.edges).length,a=zo(this.hoverObj.nodes).length;(n||i instanceof ep&&0===s&&0===a||i instanceof cf&&0===s&&0===a)&&(n=this.emitHoverEvent(t,e,i)),i instanceof cf&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)}!0===n&&this.body.emitter.emit(\"_requestRedraw\")}},{key:\"commitWithoutEmitting\",value:function(){this._selectionAccumulator.commit()}},{key:\"commitAndEmit\",value:function(t,e){var i=!1,n=this._selectionAccumulator.commit(),o={nodes:n.nodes.previous,edges:n.edges.previous};n.edges.deleted.length>0&&(this.generateClickEvent(\"deselectEdge\",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent(\"deselectNode\",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent(\"selectNode\",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent(\"selectEdge\",e,t),i=!0),!0===i&&this.generateClickEvent(\"select\",e,t)}},{key:\"getSelection\",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:\"getSelectedNodes\",value:function(){return this._selectionAccumulator.getNodes()}},{key:\"getSelectedEdges\",value:function(){return this._selectionAccumulator.getEdges()}},{key:\"getSelectedNodeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:\"getSelectedEdgeIds\",value:function(){var t;return Io(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:\"setSelection\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError(\"Selection must be an object with nodes and/or edges properties\");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=iv(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id \"'+o+'\" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=iv(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id \"'+h+'\" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit(\"_requestRedraw\"),this._selectionAccumulator.commit()}},{key:\"selectNodes\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({nodes:t},{highlightEdges:e})}},{key:\"selectEdges\",value:function(t){if(!t||void 0===t.length)throw\"Selection must be an array with ids\";this.setSelection({edges:t})}},{key:\"updateSelection\",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:\"getClickedItems\",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}(),rv=n((function(t,e){!function(t){function e(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0,t.sort=v;var i=32,n=7,o=256,r=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9];function s(t){return t<1e5?t<100?t<10?0:1:t<1e4?t<1e3?2:3:4:t<1e7?t<1e6?5:6:t<1e9?t<1e8?7:8:9}function a(t,e){if(t===e)return 0;if(~~t===t&&~~e===e){if(0===t||0===e)return t<e?-1:1;if(t<0||e<0){if(e>=0)return-1;if(t>=0)return 1;t=-t,e=-e}var i=s(t),n=s(e),o=0;return i<n?(t*=r[n-i-1],e/=10,o=-1):i>n&&(e*=r[i-n-1],t/=10,o=1),t===e?o:t<e?-1:1}var a=String(t),h=String(e);return a===h?0:a<h?-1:1}function h(t){for(var e=0;t>=i;)e|=1&t,t>>=1;return t+e}function l(t,e,i,n){var o=e+1;if(o===i)return 1;if(n(t[o++],t[e])<0){for(;o<i&&n(t[o],t[o-1])<0;)o++;d(t,e,o)}else for(;o<i&&n(t[o],t[o-1])>=0;)o++;return o-e}function d(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function c(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r=t[n],s=e,a=n;s<a;){var h=s+a>>>1;o(r,t[h])<0?a=h:s=h+1}var l=n-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;l>0;)t[s+l]=t[s+l-1],l--}t[s]=r}}function u(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])>0){for(a=n-o;h<a&&r(t,e[i+o+h])>0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}else{for(a=o+1;h<a&&r(t,e[i+o-h])<=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])>0?s=d+1:h=d}return h}function f(t,e,i,n,o,r){var s=0,a=0,h=1;if(r(t,e[i+o])<0){for(a=o+1;h<a&&r(t,e[i+o-h])<0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a);var l=s;s=o-h,h=o-l}else{for(a=n-o;h<a&&r(t,e[i+o+h])>=0;)s=h,(h=1+(h<<1))<=0&&(h=a);h>a&&(h=a),s+=o,h+=o}for(s++;s<h;){var d=s+(h-s>>>1);r(t,e[i+d])<0?h=d:s=d+1}return h}var p=function(){function t(i,r){e(this,t),this.array=null,this.compare=null,this.minGallop=n,this.length=0,this.tmpStorageLength=o,this.stackLength=0,this.runStart=null,this.runLength=null,this.stackSize=0,this.array=i,this.compare=r,this.length=i.length,this.length<2*o&&(this.tmpStorageLength=this.length>>>1),this.tmp=new Array(this.tmpStorageLength),this.stackLength=this.length<120?5:this.length<1542?10:this.length<119151?19:40,this.runStart=new Array(this.stackLength),this.runLength=new Array(this.stackLength)}return t.prototype.pushRun=function(t,e){this.runStart[this.stackSize]=t,this.runLength[this.stackSize]=e,this.stackSize+=1},t.prototype.mergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;if(t>=1&&this.runLength[t-1]<=this.runLength[t]+this.runLength[t+1]||t>=2&&this.runLength[t-2]<=this.runLength[t]+this.runLength[t-1])this.runLength[t-1]<this.runLength[t+1]&&t--;else if(this.runLength[t]>this.runLength[t+1])break;this.mergeAt(t)}},t.prototype.forceMergeRuns=function(){for(;this.stackSize>1;){var t=this.stackSize-2;t>0&&this.runLength[t-1]<this.runLength[t+1]&&t--,this.mergeAt(t)}},t.prototype.mergeAt=function(t){var e=this.compare,i=this.array,n=this.runStart[t],o=this.runLength[t],r=this.runStart[t+1],s=this.runLength[t+1];this.runLength[t]=o+s,t===this.stackSize-3&&(this.runStart[t+1]=this.runStart[t+2],this.runLength[t+1]=this.runLength[t+2]),this.stackSize--;var a=f(i[r],i,n,o,0,e);n+=a,0!=(o-=a)&&0!==(s=u(i[n+o-1],i,r,s,s-1,e))&&(o<=s?this.mergeLow(n,o,r,s):this.mergeHigh(n,o,r,s))},t.prototype.mergeLow=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<e;h++)a[h]=s[t+h];var l=0,d=i,c=t;if(s[c++]=s[d++],0!=--o)if(1!==e){for(var p=this.minGallop;;){var v=0,g=0,y=!1;do{if(r(s[d],a[l])<0){if(s[c++]=s[d++],g++,v=0,0==--o){y=!0;break}}else if(s[c++]=a[l++],v++,g=0,1==--e){y=!0;break}}while((v|g)<p);if(y)break;do{if(0!==(v=f(s[d],a,l,e,0,r))){for(h=0;h<v;h++)s[c+h]=a[l+h];if(c+=v,l+=v,(e-=v)<=1){y=!0;break}}if(s[c++]=s[d++],0==--o){y=!0;break}if(0!==(g=u(a[l],s,d,o,0,r))){for(h=0;h<g;h++)s[c+h]=s[d+h];if(c+=g,d+=g,0==(o-=g)){y=!0;break}}if(s[c++]=a[l++],1==--e){y=!0;break}p--}while(v>=n||g>=n);if(y)break;p<0&&(p=0),p+=2}if(this.minGallop=p,p<1&&(this.minGallop=1),1===e){for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else{if(0===e)throw new Error(\"mergeLow preconditions were not respected\");for(h=0;h<e;h++)s[c+h]=a[l+h]}}else{for(h=0;h<o;h++)s[c+h]=s[d+h];s[c+o]=a[l]}else for(h=0;h<e;h++)s[c+h]=a[l+h]},t.prototype.mergeHigh=function(t,e,i,o){var r=this.compare,s=this.array,a=this.tmp,h=0;for(h=0;h<o;h++)a[h]=s[i+h];var l=t+e-1,d=o-1,c=i+o-1,p=0,v=0;if(s[c--]=s[l--],0!=--e)if(1!==o){for(var g=this.minGallop;;){var y=0,m=0,b=!1;do{if(r(a[d],s[l])<0){if(s[c--]=s[l--],y++,m=0,0==--e){b=!0;break}}else if(s[c--]=a[d--],m++,y=0,1==--o){b=!0;break}}while((y|m)<g);if(b)break;do{if(0!=(y=e-f(a[d],s,t,e,e-1,r))){for(e-=y,v=1+(c-=y),p=1+(l-=y),h=y-1;h>=0;h--)s[v+h]=s[p+h];if(0===e){b=!0;break}}if(s[c--]=a[d--],1==--o){b=!0;break}if(0!=(m=o-u(s[l],a,0,o,o-1,r))){for(o-=m,v=1+(c-=m),p=1+(d-=m),h=0;h<m;h++)s[v+h]=a[p+h];if(o<=1){b=!0;break}}if(s[c--]=s[l--],0==--e){b=!0;break}g--}while(y>=n||m>=n);if(b)break;g<0&&(g=0),g+=2}if(this.minGallop=g,g<1&&(this.minGallop=1),1===o){for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else{if(0===o)throw new Error(\"mergeHigh preconditions were not respected\");for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]}}else{for(v=1+(c-=e),p=1+(l-=e),h=e-1;h>=0;h--)s[v+h]=s[p+h];s[c]=a[d]}else for(p=c-(o-1),h=0;h<o;h++)s[p+h]=a[h]},t}();function v(t,e,n,o){if(!Array.isArray(t))throw new TypeError(\"Can only sort arrays\");e?\"function\"!=typeof e&&(o=n,n=e,e=a):e=a,n||(n=0),o||(o=t.length);var r=o-n;if(!(r<2)){var s=0;if(r<i)c(t,n,o,n+(s=l(t,n,o,e)),e);else{var d=new p(t,e),u=h(r);do{if((s=l(t,n,o,e))<u){var f=r;f>u&&(f=u),c(t,n,n+f,n+s,e),s=f}d.pushRun(n,s),d.mergeRuns(),r-=s,n+=s}while(0!==r);d.forceMergeRuns()}}}}(e)}));i(rv);var sv=rv,av=sv.sort;function hv(t){var e=function(){if(\"undefined\"==typeof Reflect||!Pd)return!1;if(Pd.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Pd(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=Ld(t);if(e){var o=Ld(this).constructor;i=Pd(n,arguments,o)}else i=n.apply(this,arguments);return Fd(this,i)}}var lv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"abstract\",value:function(){throw new Error(\"Can't instantiate abstract class!\")}},{key:\"fake_use\",value:function(){}},{key:\"curveType\",value:function(){return this.abstract()}},{key:\"getPosition\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:\"getTreeSize\",value:function(t){return this.fake_use(t),this.abstract()}},{key:\"sort\",value:function(t){this.fake_use(t),this.abstract()}},{key:\"fix\",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:\"shift\",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),dv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"horizontal\"}},{key:\"getPosition\",value:function(t){return t.x}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.x-e.x}))}},{key:\"fix\",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}(lv),cv=function(t){Ad(i,t);var e=hv(i);function i(t){var n;return Nn(this,i),(n=e.call(this)).layout=t,n}return Fn(i,[{key:\"curveType\",value:function(){return\"vertical\"}},{key:\"getPosition\",value:function(t){return t.y}},{key:\"setPosition\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:\"getTreeSize\",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:\"sort\",value:function(t){av(t,(function(t,e){return t.y-e.y}))}},{key:\"fix\",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:\"shift\",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}(lv),uv=Gi.every,fv=Ao(\"every\");gt({target:\"Array\",proto:!0,forced:!fv},{every:function(t){return uv(this,t,arguments.length>1?arguments[1]:void 0)}});var pv=Ht(\"Array\").every,vv=Array.prototype,gv=function(t){var e=t.every;return t===vv||t instanceof Array&&e===vv.every?pv:e};function yv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return mv(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mv(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function mv(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}function bv(t,e){var i=new ec;return Wo(t).call(t,(function(t){var e;Wo(e=t.edges).call(e,(function(t){t.connected&&i.add(t)}))})),Wo(i).call(i,(function(t){var i=t.from.id,n=t.to.id;null==e[i]&&(e[i]=0),(null==e[n]||e[i]>=e[n])&&(e[n]=e[i]+1)})),e}function wv(t,e,i,n){var o,r,s=Gr(null),a=Kd(o=wo(Dc(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+\"Id\",l=\"to\"===i?1:-1,d=yv(n);try{var c=function(){var o=uo(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return\"continue\";s[d]=0;for(var u=[c],f=0,p=void 0,v=function(){var t,o;if(!n.has(d))return\"continue\";var r=s[p.id]+l;if(Wo(t=mr(o=p.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==p&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,u.push(t[i]))})),f>a)return{v:{v:bv(n,s)}};++f};p=u.pop();){var g=v();if(\"continue\"!==g&&\"object\"===go(g))return g.v}};for(d.s();!(r=d.n()).done;){var u=c();if(\"continue\"!==u&&\"object\"===go(u))return u.v}}catch(t){d.e(t)}finally{d.f()}return s}var kv=function(){function t(){Nn(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return Fn(t,[{key:\"addRelation\",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:\"checkIfTree\",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:\"numTrees\",value:function(){return this.treeIndex+1}},{key:\"setTreeIndex\",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:\"ensureLevel\",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:\"getMaxLevel\",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s<r.length;s++)o=Math.max(o,t(r[s]))}return i[n]=o,o}(t)}},{key:\"levelDownstream\",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:\"setMinLevelToZero\",value:function(t){var e=1e9;for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&void 0!==this.levels[n]&&(this.levels[n]-=e)}},{key:\"getTreeSize\",value:function(t,e){var i=1e9,n=-1e9,o=1e9,r=-1e9;for(var s in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,s)&&this.trees[s]===e){var a=t[s];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),r=Math.max(a.y,r)}return{min_x:i,max_x:n,min_y:o,max_y:r}}},{key:\"hasSameParent\",value:function(t,e){var i=this.parentReference[t.id],n=this.parentReference[e.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var r=0;r<n.length;r++)if(i[o]==n[r])return!0;return!1}},{key:\"inSameSubNetwork\",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:\"getLevels\",value:function(){return zo(this.distributionOrdering)}},{key:\"addToOrdering\",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,n=this.distributionOrdering[e];for(var o in n)if(n[o]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_v=function(){function t(e){Nn(this,t),this.body=e,this._resetRNG(Math.random()+\":\"+No()),this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,clusterThreshold:150,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:\"UD\",sortMethod:\"hubsize\"}},At(this.options,this.defaultOptions),this.bindEventListeners()}return Fn(t,[{key:\"bindEventListeners\",value:function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_dataLoaded\",(function(){t.layoutNetwork()})),this.body.emitter.on(\"_resetHierarchicalLayout\",(function(){t.setupHierarchicalLayout()})),this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\",(function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit(\"_forceDisableDynamicCurves\",e,!1)}}))}},{key:\"setOptions\",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,n=i.enabled;if(Eh([\"randomSeed\",\"improvedLayout\",\"clusterThreshold\"],this.options,t),$h(this.options,t,\"hierarchical\"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit(\"refresh\",!0),\"RL\"===i.direction||\"DU\"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit(\"_resetHierarchicalLayout\"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit(\"refresh\"),Ch(e,this.optionsBackup)}return e}},{key:\"_resetRNG\",value:function(t){this.initialRandomSeed=t,this._rng=ah(this.initialRandomSeed)}},{key:\"adaptAllOptionsForHierarchicalLayout\",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:\"hierarchicalRepulsion\"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||\"barnesHut\"):\"object\"===go(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||\"barnesHut\",t.physics.solver=\"hierarchicalRepulsion\"):!1!==t.physics&&(e.solver=\"barnesHut\",t.physics={solver:\"hierarchicalRepulsion\"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:\"dynamic\"}},t.edges.smooth=!1;else if(\"boolean\"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&\"dynamic\"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?\"dynamic\":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit(\"_forceDisableDynamicCurves\",i)}return t}},{key:\"positionInitially\",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;i<t.length;i++){var n=t[i],o=2*Math.PI*this._rng();void 0===n.x&&(n.x=e*Math.cos(o)),void 0===n.y&&(n.y=e*Math.sin(o))}}}},{key:\"layoutNetwork\",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var n=0,o=this.options.clusterThreshold,r={clusterNodeProperties:{shape:\"ellipse\",label:\"\",group:\"\",font:{multi:!1}},clusterEdgeProperties:{label:\"\",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>o){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit(\"_layoutFailed\"),void console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info(\"The clustering didn't succeed within the amount of interations allowed, progressing with partial result.\"),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h<t.length;h++){var l=this.body.nodes[t[h]];!1===l.predefinedPosition&&(l.x+=70*(.5-this._rng()),l.y+=70*(.5-this._rng()))}this._declusterAll(),this.body.emitter.emit(\"_repositionBezierNodes\")}}}},{key:\"_shiftToCenter\",value:function(){for(var t=pp.getRangeCore(this.body.nodes,this.body.nodeIndices),e=pp.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=e.x,n.y-=e.y}}},{key:\"_declusterAll\",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit(\"_dataChanged\")}}},{key:\"getSeed\",value:function(){return this.initialRandomSeed}},{key:\"setupHierarchicalLayout\",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new kv,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error(\"To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.\");if(!0===n){var o=this.options.hierarchical.sortMethod;\"hubsize\"===o?this._determineLevelsByHubsize():\"directed\"===o?this._determineLevelsDirected():\"custom\"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:\"_condenseHierarchy\",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,n){if(!n[i.id]&&(n[i.id]=!0,t.hierarchical.childrenReference[i.id])){var o=t.hierarchical.childrenReference[i.id];if(o.length>0)for(var r=0;r<o.length;r++)e(t.body.nodes[o[r]],n)}},s=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=t._getSpaceAroundNode(h,e),u=uo(c,2),f=u[0],p=u[1];n=Math.min(f,n),o=Math.min(p,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(e,i,n){for(var o=t.hierarchical,r=0;r<i.length;r++){var s=i[r],a=o.distributionOrdering[s];if(a.length>1)for(var h=0;h<a.length-1;h++){var l=a[h],d=a[h+1];o.hasSameParent(l,d)&&o.inSameSubNetwork(l,d)&&e(l,d,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],h=t.direction.getPosition(i),l=t.direction.getPosition(n),d=Math.abs(l-h),c=t.options.hierarchical.nodeSpacing;if(d>c){var u={},f={};r(i,u),r(n,f);var p=a(i,n),v=s(u,p),g=s(f,p),y=v[1],m=g[0],b=g[2],w=Math.abs(y-m);if(w>c){var k=y-m+c;k<-b+c&&(k=-b+c),k<0&&(t._shiftBlock(n.id,k),e=!0,!0===o&&t._centerParent(n))}}},d=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f<h.length;f++){var p=h[f];if(p.toId!=p.fromId){var v=p.toId==a?p.from:p.to;c[h[f].id]=v,t.hierarchical.levels[v.id]<l&&u.push(p)}}var g=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n+=r/Math.sqrt(r*r+d)}return n},y=function(e,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var r=t.direction.getPosition(c[i[o].id])-e;n-=d*Math.pow(r*r+d,-1.5)}return n},m=function(e,i){for(var n=t.direction.getPosition(o),r={},s=0;s<e;s++){var a=g(n,i),h=y(n,i);if(void 0!==r[n-=Math.max(-40,Math.min(40,Math.round(a/h)))])break;r[n]=s}return n},b=m(n,u);!function(n){var a=t.direction.getPosition(o);if(void 0===i[o.id]){var h={};r(o,h),i[o.id]=h}var l=s(i[o.id]),d=l[2],c=l[3],u=n-a,f=0;u>0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=t._getSpaceAroundNode(o),s=uo(r,2),a=s[0],h=s[1],l=i-n,d=n;l>0?d=Math.min(n+(h-t.options.hierarchical.nodeSpacing),i):l<0&&(d=Math.max(n-(a-t.options.hierarchical.nodeSpacing),i)),d!==n&&(t.direction.setPosition(o,d),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i&&(e=!1,h(l,n,!0),!0===e);o++);}(5),function(){for(var e in t.body.nodes)Object.prototype.hasOwnProperty.call(t.body.nodes,e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=t.hierarchical.getLevels();n=Xo(n).call(n);for(var o=0;o<i;o++){e=!1;for(var r=0;r<n.length;r++)for(var s=n[r],a=t.hierarchical.distributionOrdering[s],h=0;h<a.length;h++)d(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=Xo(e).call(e);for(var i=0;i<e.length;i++)for(var n=e[i],o=t.hierarchical.distributionOrdering[n],r=0;r<o.length;r++)t._centerParent(o[r])}(),function(){for(var e=o(),i=0,r=0;r<e.length-1;r++){i+=e[r].max-e[r+1].min+t.options.hierarchical.treeSpacing,n(r+1,i)}}()}},{key:\"_getSpaceAroundNode\",value:function(t,e){var i=!0;void 0===e&&(i=!1);var n=this.hierarchical.levels[t.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[t.id],r=this.direction.getPosition(t),s=this.hierarchical.distributionOrdering[n],a=1e9,h=1e9;if(0!==o){var l=s[o-1];if(!0===i&&void 0===e[l.id]||!1===i)a=r-this.direction.getPosition(l)}if(o!=s.length-1){var d=s[o+1];if(!0===i&&void 0===e[d.id]||!1===i){var c=this.direction.getPosition(d);h=Math.min(h,c-r)}}return[a,h]}return[0,0]}},{key:\"_centerParent\",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var n=e[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var s=this._getCenterPosition(r),a=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=uo(h,2),d=l[0],c=l[1],u=a-s;(u<0&&Math.abs(u)<c-this.options.hierarchical.nodeSpacing||u>0&&Math.abs(u)<d-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,s)}}}},{key:\"_placeNodesByHierarchy\",value:function(t){for(var e in this.positionedNodes={},t)if(Object.prototype.hasOwnProperty.call(t,e)){var i,n=zo(t[e]);n=this._indexArrayToNodes(n),xc(i=this.direction).call(i,n);for(var o=0,r=0;r<n.length;r++){var s=n[r];if(void 0===this.positionedNodes[s.id]){var a=this.options.hierarchical.nodeSpacing,h=a*o;o>0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:\"_placeBranchNodes\",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;r<n.length;r++)o.push(this.body.nodes[n[r]]);xc(i=this.direction).call(i,o);for(var s=0;s<o.length;s++){var a=o[s],h=this.hierarchical.levels[a.id];if(!(h>e&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:\"_validatePositionAndContinue\",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,r=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(r.withChild,o)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:\"_indexArrayToNodes\",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:\"_getDistribution\",value:function(){var t,e,i={};for(t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){e=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(e,n),void 0===i[n]&&(i[n]={}),i[n][t]=e}return i}},{key:\"_getActiveEdges\",value:function(t){var e=this,i=[];return Dh(t.edges,(function(t){var n;-1!==Hr(n=e.body.edgeIndices).call(n,t.id)&&i.push(t)})),i}},{key:\"_getHubSizes\",value:function(){var t=this,e={};Dh(this.body.nodeIndices,(function(i){var n=t.body.nodes[i],o=t._getActiveEdges(n).length;e[o]=!0}));var i=[];return Dh(e,(function(t){i.push(Number(t))})),xc(sv).call(sv,i,(function(t,e){return e-t})),i}},{key:\"_determineLevelsByHubsize\",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),n=function(n){var o=i[n];if(0===o)return\"break\";Dh(t.body.nodeIndices,(function(i){var n=t.body.nodes[i];o===t._getActiveEdges(n).length&&t._crawlNetwork(e,i)}))},o=0;o<i.length;++o){if(\"break\"===n(o))break}}},{key:\"_determineLevelsCustomCallback\",value:function(){var t=this;this._crawlNetwork((function(e,i,n){var o=t.hierarchical.levels[e.id];void 0===o&&(o=t.hierarchical.levels[e.id]=1e5);var r=(pp.cloneOptions(e,\"node\"),pp.cloneOptions(i,\"node\"),void pp.cloneOptions(n,\"edge\"));t.hierarchical.levels[i.id]=o+r})),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_determineLevelsDirected\",value:function(){var t,e=this,i=Kd(t=this.body.nodeIndices).call(t,(function(t,i){return t.set(i,e.body.nodes[i]),t}),new vd);\"roots\"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.from===e}))}),(function(t,e){return e<t}),\"to\",t)}(i):this.hierarchical.levels=function(t){return wv((function(e){var i,n;return gv(i=mr(n=e.edges).call(n,(function(e){return t.has(e.toId)}))).call(i,(function(t){return t.to===e}))}),(function(t,e){return e>t}),\"from\",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:\"_generateMap\",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:\"_crawlNetwork\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h<a.length;h++){var l=a[h];!0===l.connected&&(s=l.toId==o.id?l.from:l.to,o.id!=s.id&&(e(o,s,l),i(s,r)))}}};if(void 0===i)for(var r=0,s=0;s<this.body.nodeIndices.length;s++){var a=this.body.nodeIndices[s];if(void 0===n[a]){var h=this.body.nodes[a];o(h,r),r+=1}}else{var l=this.body.nodes[i];if(void 0===l)return void console.error(\"Node not found:\",i);o(l)}}},{key:\"_shiftBlock\",value:function(t,e){var i=this,n={};!function t(o){if(!n[o]){n[o]=!0,i.direction.shift(o,e);var r=i.hierarchical.childrenReference[o];if(void 0!==r)for(var s=0;s<r.length;s++)t(r[s])}}(t)}},{key:\"_findCommonParent\",value:function(t,e){var i=this,n={};return function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];e[s]=!0,t(e,s)}}(n,t),function t(e,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var r=0;r<o.length;r++){var s=o[r];if(void 0!==e[s])return{foundParent:s,withChild:n};var a=t(e,s);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,e)}},{key:\"setDirectionStrategy\",value:function(){var t=\"UD\"===this.options.hierarchical.direction||\"DU\"===this.options.hierarchical.direction;this.direction=t?new dv(this):new cv(this)}},{key:\"_getCenterPosition\",value:function(t){for(var e=1e9,i=-1e9,n=0;n<t.length;n++){var o=void 0;if(void 0!==t[n].id)o=t[n];else{var r=t[n];o=this.body.nodes[r]}var s=this.direction.getPosition(o);e=Math.min(e,s),i=Math.max(i,s)}return.5*(e+i)}}]),t}();function xv(t,e){var i=void 0!==ko&&Bi(t)||t[\"@@iterator\"];if(!i){if(So(t)||(i=function(t,e){var i;if(!t)return;if(\"string\"==typeof t)return Ev(t,e);var n=Oo(i=Object.prototype.toString.call(t)).call(i,8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Ei(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ev(t,e)}(t))||e&&t&&\"number\"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ev(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var Ov=function(){function t(e,i,n,o){var r,s,a=this;Nn(this,t),this.body=e,this.canvas=i,this.selectionHandler=n,this.interactionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:\"dot\",size:6,color:{background:\"#ff0000\",border:\"#3c3c3c\",highlight:{background:\"#07f968\",border:\"#3c3c3c\"}},borderWidth:2,borderWidthSelected:2}},At(this.options,this.defaultOptions),this.body.emitter.on(\"destroy\",(function(){a._clean()})),this.body.emitter.on(\"_dataChanged\",Vt(r=this._restore).call(r,this)),this.body.emitter.on(\"_resetData\",Vt(s=this._restore).call(s,this))}return Fn(t,[{key:\"_restore\",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:\"setOptions\",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&(\"boolean\"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Ch(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:\"toggleEditMode\",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:\"enableEditMode\",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\",this.editModeDiv.style.display=\"none\",this.showManipulatorToolbar())}},{key:\"disableEditMode\",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display=\"none\",this.closeDiv.style.display=\"none\",this.editModeDiv.style.display=\"block\",this._createEditButton())}},{key:\"showManipulatorToolbar\",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display=\"block\",this.closeDiv.style.display=\"block\";var i=this.selectionHandler.getSelectedNodeCount(),n=this.selectionHandler.getSelectedEdgeCount(),o=i+n,r=this.options.locales[this.options.locale],s=!1;!1!==this.options.addNode&&(this._createAddNodeButton(r),s=!0),!1!==this.options.addEdge&&(!0===s?this._createSeperator(1):s=!0,this._createAddEdgeButton(r)),1===i&&\"function\"==typeof this.options.editNode?(!0===s?this._createSeperator(2):s=!0,this._createEditNodeButton(r)):1===n&&0===i&&!1!==this.options.editEdge&&(!0===s?this._createSeperator(3):s=!0,this._createEditEdgeButton(r)),0!==o&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent(\"select\",Vt(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit(\"_redraw\")}},{key:\"addNodeMode\",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addNode\",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent(\"click\",Vt(t=this._performAddNode).call(t,this))}},{key:\"editNode\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode=\"editNode\",\"function\"!=typeof this.options.editNode)throw new Error(\"No function has been configured to handle the editing of nodes.\");if(!0!==e.isCluster){var i=Ch({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");this.options.editNode(i,(function(e){null!=e&&\"editNode\"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:\"addEdgeMode\",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"addEdge\",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI(\"onTouch\",Vt(t=this._handleConnect).call(t,this)),this._temporaryBindUI(\"onDragEnd\",Vt(e=this._finishConnect).call(e,this)),this._temporaryBindUI(\"onDrag\",Vt(i=this._dragControlNode).call(i,this)),this._temporaryBindUI(\"onRelease\",Vt(n=this._finishConnect).call(n,this)),this._temporaryBindUI(\"onDragStart\",Vt(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI(\"onHold\",(function(){}))}},{key:\"editEdgeMode\",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"editEdge\",\"object\"!==go(this.options.editEdge)||\"function\"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI(\"onTouch\",Vt(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI(\"onTap\",(function(){})),this._temporaryBindUI(\"onHold\",(function(){})),this._temporaryBindUI(\"onDragStart\",Vt(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI(\"onDrag\",Vt(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI(\"onDragEnd\",Vt(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI(\"onMouseMove\",(function(){})),this._temporaryBindEvent(\"beforeDrawing\",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit(\"_redraw\")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:\"deleteSelected\",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode=\"delete\";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o<e.length;o++)if(!0===this.body.nodes[e[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);\"function\"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&\"function\"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if(\"function\"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error(\"The function for delete does not support two arguments (data, callback)\");n(r,(function(e){null!=e&&\"delete\"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar()):(t.body.emitter.emit(\"startSimulation\"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit(\"startSimulation\"),this.showManipulatorToolbar()}},{key:\"_setup\",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:\"_createWrappers\",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement(\"div\"),this.manipulationDiv.className=\"vis-manipulation\",!0===this.editMode?this.manipulationDiv.style.display=\"block\":this.manipulationDiv.style.display=\"none\",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement(\"div\"),this.editModeDiv.className=\"vis-edit-mode\",!0===this.editMode?this.editModeDiv.style.display=\"none\":this.editModeDiv.style.display=\"block\",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement(\"button\"),this.closeDiv.className=\"vis-close\",this.closeDiv.setAttribute(\"aria-label\",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:\"_getNewTargetNode\",value:function(t,e){var i=Ch({},this.options.controlNodeStyle);i.id=\"targetNode\"+Wc(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:\"_createEditButton\",value:function(){var t;this._clean(),this.manipulationDOM={},mh(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton(\"editMode\",\"vis-edit vis-edit-mode\",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Vt(t=this.toggleEditMode).call(t,this))}},{key:\"_clean\",value:function(){this.inMode=!1,!0===this.guiEnabled&&(mh(this.editModeDiv),mh(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit(\"restorePhysics\")}},{key:\"_cleanupDOMEventListeners\",value:function(){var t,e,i=xv(er(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:\"_removeManipulationDOM\",value:function(){this._clean(),mh(this.manipulationDiv),mh(this.editModeDiv),mh(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:\"_createSeperator\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM[\"seperatorLineDiv\"+t]=document.createElement(\"div\"),this.manipulationDOM[\"seperatorLineDiv\"+t].className=\"vis-separator-line\",this.manipulationDiv.appendChild(this.manipulationDOM[\"seperatorLineDiv\"+t])}},{key:\"_createAddNodeButton\",value:function(t){var e,i=this._createButton(\"addNode\",\"vis-add\",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addNodeMode).call(e,this))}},{key:\"_createAddEdgeButton\",value:function(t){var e,i=this._createButton(\"addEdge\",\"vis-connect\",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.addEdgeMode).call(e,this))}},{key:\"_createEditNodeButton\",value:function(t){var e,i=this._createButton(\"editNode\",\"vis-edit\",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editNode).call(e,this))}},{key:\"_createEditEdgeButton\",value:function(t){var e,i=this._createButton(\"editEdge\",\"vis-edit\",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.editEdgeMode).call(e,this))}},{key:\"_createDeleteButton\",value:function(t){var e,i;i=this.options.rtl?\"vis-delete-rtl\":\"vis-delete\";var n=this._createButton(\"delete\",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Vt(e=this.deleteSelected).call(e,this))}},{key:\"_createBackButton\",value:function(t){var e,i=this._createButton(\"back\",\"vis-back\",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Vt(e=this.showManipulatorToolbar).call(e,this))}},{key:\"_createButton\",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"vis-label\";return this.manipulationDOM[t+\"Div\"]=document.createElement(\"button\"),this.manipulationDOM[t+\"Div\"].className=\"vis-button \"+e,this.manipulationDOM[t+\"Label\"]=document.createElement(\"div\"),this.manipulationDOM[t+\"Label\"].className=n,this.manipulationDOM[t+\"Label\"].innerText=i,this.manipulationDOM[t+\"Div\"].appendChild(this.manipulationDOM[t+\"Label\"]),this.manipulationDOM[t+\"Div\"]}},{key:\"_createDescription\",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement(\"div\"),this.manipulationDOM.descriptionLabel.className=\"vis-none\",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:\"_temporaryBindEvent\",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:\"_temporaryBindUI\",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error(\"This UI function does not exist. Typo? You tried: \"+t+\" possible are: \"+es(zo(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:\"_unbindTemporaryUIs\",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:\"_unbindTemporaryEvents\",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:\"_bindElementEvents\",value:function(t,e){var i=new ll(t,{});_p(i,e),this._domEventListenerCleanupQueue.push((function(){i.destroy()}));var n=function(t){var i=t.keyCode,n=t.key;\"Enter\"!==n&&\" \"!==n&&13!==i&&32!==i||e()};t.addEventListener(\"keyup\",n,!1),this._domEventListenerCleanupQueue.push((function(){t.removeEventListener(\"keyup\",n,!1)}))}},{key:\"_cleanupTemporaryNodesAndEdges\",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){var e;this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var i,n=Hr(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[t]);if(-1!==n)er(i=this.body.edgeIndices).call(i,n,1)}for(var o=0;o<this.temporaryIds.nodes.length;o++){var r;delete this.body.nodes[this.temporaryIds.nodes[o]];var s,a=Hr(r=this.body.nodeIndices).call(r,this.temporaryIds.nodes[o]);if(-1!==a)er(s=this.body.nodeIndices).call(s,a,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:\"_controlNodeTouch\",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation)}},{key:\"_controlNodeDragStart\",value:function(){var t=this.lastTouch,e=this.selectionHandler._pointerToPositionObject(t),i=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],o=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=i.isOverlappingWith(e),s=n.isOverlappingWith(e);!0===r?(this.selectedControlNode=i,o.edgeType.from=i):!0===s&&(this.selectedControlNode=n,o.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDrag\",value:function(t){this.body.emitter.emit(\"disablePhysics\");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);void 0!==this.selectedControlNode?(this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y):this.interactionHandler.onDrag(t),this.body.emitter.emit(\"_redraw\")}},{key:\"_controlNodeDragEnd\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit(\"restorePhysics\");this.body.emitter.emit(\"_redraw\")}}},{key:\"_handleConnect\",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=At({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:\"connectionEdge\"+Wc(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:\"continuous\",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:\"_dragControlNode\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragging\",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit(\"_redraw\")}else this.interactionHandler.onDrag(t)}},{key:\"_finishConnect\",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===Hr(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent(\"controlNodeDragEnd\",t,e),this.body.emitter.emit(\"_redraw\")}},{key:\"_dragStartEdge\",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent(\"dragStart\",t,e,void 0,!0)}},{key:\"_performAddNode\",value:function(t){var e=this,i={id:Wc(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:\"new\"};if(\"function\"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error(\"The function for add does not support two arguments (data,callback)\");this.options.addNode(i,(function(t){null!=t&&\"addNode\"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:\"_performAddEdge\",value:function(t,e){var i=this,n={from:t,to:e};if(\"function\"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error(\"The function for connect does not support two arguments (data,callback)\");this.options.addEdge(n,(function(t){null!=t&&\"addEdge\"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:\"_performEditEdge\",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if(\"object\"===go(o)&&(o=o.editWithoutDrag),\"function\"==typeof o){if(2!==o.length)throw new Error(\"The function for edit does not support two arguments (data, callback)\");o(n,(function(t){null==t||\"editEdge\"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit(\"_redraw\"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),Cv=\"string\",Sv=\"boolean\",Tv=\"number\",Mv=\"array\",Pv=\"object\",Dv=[\"arrow\",\"bar\",\"box\",\"circle\",\"crow\",\"curve\",\"diamond\",\"image\",\"inv_curve\",\"inv_triangle\",\"triangle\",\"vee\"],Iv={borderWidth:{number:Tv},borderWidthSelected:{number:Tv,undefined:\"undefined\"},brokenImage:{string:Cv,undefined:\"undefined\"},chosen:{label:{boolean:Sv,function:\"function\"},node:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{border:{string:Cv},background:{string:Cv},highlight:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},hover:{border:{string:Cv},background:{string:Cv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},opacity:{number:Tv,undefined:\"undefined\"},fixed:{x:{boolean:Sv},y:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},font:{align:{string:Cv},color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},group:{string:Cv,number:Tv,undefined:\"undefined\"},heightConstraint:{minimum:{number:Tv},valign:{string:Cv},__type__:{object:Pv,boolean:Sv,number:Tv}},hidden:{boolean:Sv},icon:{face:{string:Cv},code:{string:Cv},size:{number:Tv},color:{string:Cv},weight:{string:Cv,number:Tv},__type__:{object:Pv}},id:{string:Cv,number:Tv},image:{selected:{string:Cv,undefined:\"undefined\"},unselected:{string:Cv,undefined:\"undefined\"},__type__:{object:Pv,string:Cv}},imagePadding:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},level:{number:Tv,undefined:\"undefined\"},margin:{top:{number:Tv},right:{number:Tv},bottom:{number:Tv},left:{number:Tv},__type__:{object:Pv,number:Tv}},mass:{number:Tv},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},shape:{string:[\"custom\",\"ellipse\",\"circle\",\"database\",\"box\",\"text\",\"image\",\"circularImage\",\"diamond\",\"dot\",\"star\",\"triangle\",\"triangleDown\",\"square\",\"icon\",\"hexagon\"]},ctxRenderer:{function:\"function\"},shapeProperties:{borderDashes:{boolean:Sv,array:Mv},borderRadius:{number:Tv},interpolation:{boolean:Sv},useImageSize:{boolean:Sv},useBorderWithImage:{boolean:Sv},coordinateOrigin:{string:[\"center\",\"top-left\"]},__type__:{object:Pv}},size:{number:Tv},title:{string:Cv,dom:\"dom\",undefined:\"undefined\"},value:{number:Tv,undefined:\"undefined\"},widthConstraint:{minimum:{number:Tv},maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},Bv={configure:{enabled:{boolean:Sv},filter:{boolean:Sv,string:Cv,array:Mv,function:\"function\"},container:{dom:\"dom\"},showButton:{boolean:Sv},__type__:{object:Pv,boolean:Sv,string:Cv,array:Mv,function:\"function\"}},edges:{arrows:{to:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageHeight:{number:Tv},imageWidth:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},middle:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},from:{enabled:{boolean:Sv},scaleFactor:{number:Tv},type:{string:Dv},imageWidth:{number:Tv},imageHeight:{number:Tv},src:{string:Cv},__type__:{object:Pv,boolean:Sv}},__type__:{string:[\"from\",\"to\",\"middle\"],object:Pv}},endPointOffset:{from:{number:Tv},to:{number:Tv},__type__:{object:Pv,number:Tv}},arrowStrikethrough:{boolean:Sv},background:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},dashes:{boolean:Sv,array:Mv},__type__:{object:Pv,boolean:Sv}},chosen:{label:{boolean:Sv,function:\"function\"},edge:{boolean:Sv,function:\"function\"},__type__:{object:Pv,boolean:Sv}},color:{color:{string:Cv},highlight:{string:Cv},hover:{string:Cv},inherit:{string:[\"from\",\"to\",\"both\"],boolean:Sv},opacity:{number:Tv},__type__:{object:Pv,string:Cv}},dashes:{boolean:Sv,array:Mv},font:{color:{string:Cv},size:{number:Tv},face:{string:Cv},background:{string:Cv},strokeWidth:{number:Tv},strokeColor:{string:Cv},align:{string:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},vadjust:{number:Tv},multi:{boolean:Sv,string:Cv},bold:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},boldital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},ital:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},mono:{color:{string:Cv},size:{number:Tv},face:{string:Cv},mod:{string:Cv},vadjust:{number:Tv},__type__:{object:Pv,string:Cv}},__type__:{object:Pv,string:Cv}},hidden:{boolean:Sv},hoverWidth:{function:\"function\",number:Tv},label:{string:Cv,undefined:\"undefined\"},labelHighlightBold:{boolean:Sv},length:{number:Tv,undefined:\"undefined\"},physics:{boolean:Sv},scaling:{min:{number:Tv},max:{number:Tv},label:{enabled:{boolean:Sv},min:{number:Tv},max:{number:Tv},maxVisible:{number:Tv},drawThreshold:{number:Tv},__type__:{object:Pv,boolean:Sv}},customScalingFunction:{function:\"function\"},__type__:{object:Pv}},selectionWidth:{function:\"function\",number:Tv},selfReferenceSize:{number:Tv},selfReference:{size:{number:Tv},angle:{number:Tv},renderBehindTheNode:{boolean:Sv},__type__:{object:Pv}},shadow:{enabled:{boolean:Sv},color:{string:Cv},size:{number:Tv},x:{number:Tv},y:{number:Tv},__type__:{object:Pv,boolean:Sv}},smooth:{enabled:{boolean:Sv},type:{string:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"]},roundness:{number:Tv},forceDirection:{string:[\"horizontal\",\"vertical\",\"none\"],boolean:Sv},__type__:{object:Pv,boolean:Sv}},title:{string:Cv,undefined:\"undefined\"},width:{number:Tv},widthConstraint:{maximum:{number:Tv},__type__:{object:Pv,boolean:Sv,number:Tv}},value:{number:Tv,undefined:\"undefined\"},__type__:{object:Pv}},groups:{useDefaultGroups:{boolean:Sv},__any__:Iv,__type__:{object:Pv}},interaction:{dragNodes:{boolean:Sv},dragView:{boolean:Sv},hideEdgesOnDrag:{boolean:Sv},hideEdgesOnZoom:{boolean:Sv},hideNodesOnDrag:{boolean:Sv},hover:{boolean:Sv},keyboard:{enabled:{boolean:Sv},speed:{x:{number:Tv},y:{number:Tv},zoom:{number:Tv},__type__:{object:Pv}},bindToWindow:{boolean:Sv},autoFocus:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},multiselect:{boolean:Sv},navigationButtons:{boolean:Sv},selectable:{boolean:Sv},selectConnectedEdges:{boolean:Sv},hoverConnectedEdges:{boolean:Sv},tooltipDelay:{number:Tv},zoomView:{boolean:Sv},zoomSpeed:{number:Tv},__type__:{object:Pv}},layout:{randomSeed:{undefined:\"undefined\",number:Tv,string:Cv},improvedLayout:{boolean:Sv},clusterThreshold:{number:Tv},hierarchical:{enabled:{boolean:Sv},levelSeparation:{number:Tv},nodeSpacing:{number:Tv},treeSpacing:{number:Tv},blockShifting:{boolean:Sv},edgeMinimization:{boolean:Sv},parentCentralization:{boolean:Sv},direction:{string:[\"UD\",\"DU\",\"LR\",\"RL\"]},sortMethod:{string:[\"hubsize\",\"directed\"]},shakeTowards:{string:[\"leaves\",\"roots\"]},__type__:{object:Pv,boolean:Sv}},__type__:{object:Pv}},manipulation:{enabled:{boolean:Sv},initiallyActive:{boolean:Sv},addNode:{boolean:Sv,function:\"function\"},addEdge:{boolean:Sv,function:\"function\"},editNode:{function:\"function\"},editEdge:{editWithoutDrag:{function:\"function\"},__type__:{object:Pv,boolean:Sv,function:\"function\"}},deleteNode:{boolean:Sv,function:\"function\"},deleteEdge:{boolean:Sv,function:\"function\"},controlNodeStyle:Iv,__type__:{object:Pv,boolean:Sv}},nodes:Iv,physics:{enabled:{boolean:Sv},barnesHut:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},forceAtlas2Based:{theta:{number:Tv},gravitationalConstant:{number:Tv},centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},repulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},__type__:{object:Pv}},hierarchicalRepulsion:{centralGravity:{number:Tv},springLength:{number:Tv},springConstant:{number:Tv},nodeDistance:{number:Tv},damping:{number:Tv},avoidOverlap:{number:Tv},__type__:{object:Pv}},maxVelocity:{number:Tv},minVelocity:{number:Tv},solver:{string:[\"barnesHut\",\"repulsion\",\"hierarchicalRepulsion\",\"forceAtlas2Based\"]},stabilization:{enabled:{boolean:Sv},iterations:{number:Tv},updateInterval:{number:Tv},onlyDynamicEdges:{boolean:Sv},fit:{boolean:Sv},__type__:{object:Pv,boolean:Sv}},timestep:{number:Tv},adaptiveTimestep:{boolean:Sv},wind:{x:{number:Tv},y:{number:Tv},__type__:{object:Pv}},__type__:{object:Pv,boolean:Sv}},autoResize:{boolean:Sv},clickToUse:{boolean:Sv},locale:{string:Cv},locales:{__any__:{any:\"any\"},__type__:{object:Pv}},height:{string:Cv},width:{string:Cv},__type__:{object:Pv}},zv={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#97C2FC\"],highlight:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]},hover:{border:[\"color\",\"#2B7CE9\"],background:[\"color\",\"#D2E5FF\"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[0,0,50,1],strokeColor:[\"color\",\"#ffffff\"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:[\"ellipse\",\"box\",\"circle\",\"database\",\"diamond\",\"dot\",\"square\",\"star\",\"text\",\"triangle\",\"triangleDown\",\"hexagon\"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:\"arrow\"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:[\"color\",\"#848484\"],highlight:[\"color\",\"#848484\"],hover:[\"color\",\"#848484\"],inherit:[\"from\",\"to\",\"both\",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:[\"color\",\"#343434\"],size:[14,0,100,1],face:[\"arial\",\"verdana\",\"tahoma\"],background:[\"color\",\"none\"],strokeWidth:[2,0,50,1],strokeColor:[\"color\",\"#ffffff\"],align:[\"horizontal\",\"top\",\"middle\",\"bottom\"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:\"rgba(0,0,0,0.5)\",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:[\"dynamic\",\"continuous\",\"discrete\",\"diagonalCross\",\"straightCross\",\"horizontal\",\"vertical\",\"curvedCW\",\"curvedCCW\",\"cubicBezier\"],forceDirection:[\"horizontal\",\"vertical\",\"none\"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:[\"UD\",\"DU\",\"LR\",\"RL\"],sortMethod:[\"hubsize\",\"directed\"],shakeTowards:[\"leaves\",\"roots\"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:[\"barnesHut\",\"forceAtlas2Based\",\"repulsion\",\"hierarchicalRepulsion\"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},Nv=function(t,e,i){var n;return!(!dr(t).call(t,\"physics\")||!dr(n=zv.physics.solver).call(n,e)||i.physics.solver===e||\"wind\"===e)},Av=Object.freeze({__proto__:null,configuratorHideOption:Nv,allOptions:Bv,configureOptions:zv}),Fv=function(){function t(){Nn(this,t)}return Fn(t,[{key:\"getDistances\",value:function(t,e,i){for(var n={},o=t.edges,r=0;r<e.length;r++){var s={};n[e[r]]=s;for(var a=0;a<e.length;a++)s[e[a]]=r==a?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var d=e.length,c=0;c<d;c++)for(var u=e[c],f=n[u],p=0;p<d-1;p++)for(var v=e[p],g=n[v],y=p+1;y<d;y++){var m=e[y],b=n[m],w=Math.min(g[m],g[u]+f[m]);g[m]=w,b[v]=w}return n}}]),t}(),jv=function(){function t(e,i,n){Nn(this,t),this.body=e,this.springLength=i,this.springConstant=n,this.distanceSolver=new Fv}return Fn(t,[{key:\"setOptions\",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:\"solve\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=.01,r=1,s=0,a=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),h=5,l=1e9,d=0,c=0,u=0,f=0,p=0;l>o&&s<a;){s+=1;var v=this._getHighestEnergyNode(i),g=uo(v,4);for(d=g[0],l=g[1],c=g[2],u=g[3],f=l,p=0;f>r&&p<h;){p+=1,this._moveNode(d,c,u);var y=this._getEnergy(d),m=uo(y,3);f=m[0],c=m[1],u=m[2]}}}},{key:\"_getHighestEnergyNode\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a<e.length;a++){var h=e[a];if(!0!==i[h].predefinedPosition||!0===i[h].isCluster&&!0===t||!0!==i[h].options.fixed.x||!0!==i[h].options.fixed.y){var l=this._getEnergy(h),d=uo(l,3),c=d[0],u=d[1],f=d[2];n<c&&(n=c,o=h,r=u,s=f)}}return[o,n,r,s]}},{key:\"_getEnergy\",value:function(t){var e=uo(this.E_sums[t],2),i=e[0],n=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:\"_moveNode\",value:function(t,e,i){for(var n=this.body.nodeIndices,o=this.body.nodes,r=0,s=0,a=0,h=o[t].x,l=o[t].y,d=this.K_matrix[t],c=this.L_matrix[t],u=0;u<n.length;u++){var f=n[u];if(f!==t){var p=o[f].x,v=o[f].y,g=d[f],y=c[f],m=1/Math.pow(Math.pow(h-p,2)+Math.pow(l-v,2),1.5);r+=g*(1-y*Math.pow(l-v,2)*m),s+=g*(y*(h-p)*(l-v)*m),a+=g*(1-y*Math.pow(h-p,2)*m)}}var b=(e/r+i/s)/(s/r-a/s),w=-(s*b+e)/r;o[t].x+=w,o[t].y+=b,this._updateE_matrix(t)}},{key:\"_createL_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<e.length;n++){this.L_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.L_matrix[e[n]][e[o]]=i*t[e[n]][e[o]]}}},{key:\"_createK_matrix\",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<e.length;n++){this.K_matrix[e[n]]={};for(var o=0;o<e.length;o++)this.K_matrix[e[n]][e[o]]=i*Math.pow(t[e[n]][e[o]],-2)}}},{key:\"_createE_matrix\",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var n=0;n<t.length;n++){for(var o=t[n],r=e[o].x,s=e[o].y,a=0,h=0,l=n;l<t.length;l++){var d=t[l];if(d!==o){var c=e[d].x,u=e[d].y,f=1/Math.sqrt(Math.pow(r-c,2)+Math.pow(s-u,2));this.E_matrix[o][l]=[this.K_matrix[o][d]*(r-c-this.L_matrix[o][d]*(r-c)*f),this.K_matrix[o][d]*(s-u-this.L_matrix[o][d]*(s-u)*f)],this.E_matrix[d][n]=this.E_matrix[o][l],a+=this.E_matrix[o][l][0],h+=this.E_matrix[o][l][1]}}this.E_sums[o]=[a,h]}}},{key:\"_updateE_matrix\",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[t],o=this.K_matrix[t],r=this.L_matrix[t],s=i[t].x,a=i[t].y,h=0,l=0,d=0;d<e.length;d++){var c=e[d];if(c!==t){var u=n[d],f=u[0],p=u[1],v=i[c].x,g=i[c].y,y=1/Math.sqrt(Math.pow(s-v,2)+Math.pow(a-g,2)),m=o[c]*(s-v-r[c]*(s-v)*y),b=o[c]*(a-g-r[c]*(a-g)*y);n[d]=[m,b],h+=m,l+=b;var w=this.E_sums[c];w[0]+=m-f,w[1]+=b-p}}this.E_sums[t]=[h,l]}}]),t}();function Rv(t,e,i){var n,o,r,s,a=this;if(!(this instanceof Rv))throw new SyntaxError(\"Constructor must be called with the new operator\");this.options={},this.defaultOptions={locale:\"en\",locales:Kl,clickToUse:!1},At(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:Vt(n=this.on).call(n,this),off:Vt(o=this.off).call(o,this),emit:Vt(r=this.emit).call(r,this),once:Vt(s=this.once).call(s,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new Zl((function(){return a.body.emitter.emit(\"_requestRedraw\")})),this.groups=new gd,this.canvas=new Ep(this.body),this.selectionHandler=new ov(this.body,this.canvas),this.interactionHandler=new Ip(this.body,this.canvas,this.selectionHandler),this.view=new Cp(this.body,this.canvas),this.renderer=new wp(this.body,this.canvas),this.physics=new fp(this.body),this.layoutEngine=new _v(this.body),this.clustering=new yp(this.body),this.manipulation=new Ov(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new pf(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new ip(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new jv(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function Lv(t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function Hv(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}}function Wv(t,e,i){var n;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),i.appendChild(n)):(n=document.createElementNS(\"http://www.w3.org/2000/svg\",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Zt(Rv.prototype),Rv.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ul.validate(t,Bv)&&console.error(\"%cErrors have been found in the supplied options object.\",cl);if(Eh([\"locale\",\"locales\",\"clickToUse\"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=e.split(/[-_ /]/,2),n=uo(i,2),o=n[0],r=n[1],s=null!=o?o.toLowerCase():null,a=null!=r?r.toUpperCase():null;if(s&&a){var h,l=s+\"-\"+a;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn(Eo(h=\"Unknown variant \".concat(a,\" of language \")).call(h,s,\".\"))}if(s){var d=s;if(Object.prototype.hasOwnProperty.call(t,d))return d;console.warn(\"Unknown language \".concat(s))}return console.warn(\"Unknown locale \".concat(e,\", falling back to English.\")),\"en\"}catch(t){return console.error(t),console.warn(\"Unexpected error while normalizing locale \".concat(e,\", falling back to English.\")),\"en\"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit(\"refreshNodes\"),\"configure\"in t&&(this.configurator||(this.configurator=new hl(this,this.body.container,zv,this.canvas.pixelRatio,Nv)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Ch(i.nodes,this.nodesHandler.options),Ch(i.edges,this.edgesHandler.options),Ch(i.layout,this.layoutEngine.options),Ch(i.interaction,this.selectionHandler.options),Ch(i.interaction,this.renderer.options),Ch(i.interaction,this.interactionHandler.options),Ch(i.manipulation,this.manipulation.options),Ch(i.physics,this.physics.options),Ch(i.global,this.canvas.options),Ch(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new sl(this.canvas.frame),this.activator.on(\"change\",(function(){e.body.emitter.emit(\"activate\")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit(\"activate\")):this.body.emitter.emit(\"activate\"),this.canvas.setSize(),this.body.emitter.emit(\"startSimulation\")}},Rv.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},Rv.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on(\"_dataChanged\",(function(){t.edgesHandler._updateState(),t.body.emitter.emit(\"_dataUpdated\")})),this.body.emitter.on(\"_dataUpdated\",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit(\"startSimulation\"),t.body.emitter.emit(\"_requestRedraw\")}))},Rv.prototype.setData=function(t){if(this.body.emitter.emit(\"resetPhysics\"),this.body.emitter.emit(\"_resetData\"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter \"dot\" or  parameter pair \"nodes\" and \"edges\", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn(\"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\");var e=Ul(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn(\"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\");var i=Xl(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit(\"_dataChanged\"),this.body.emitter.emit(\"_dataLoaded\"),this.body.emitter.emit(\"initPhysics\")},Rv.prototype.destroy=function(){for(var t in this.body.emitter.emit(\"destroy\"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];mh(this.body.container)},Rv.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},Rv.prototype.isActive=function(){return!this.activator||this.activator.active},Rv.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},Rv.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},Rv.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},Rv.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},Rv.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},Rv.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},Rv.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},Rv.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},Rv.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},Rv.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},Rv.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},Rv.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},Rv.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},Rv.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},Rv.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},Rv.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},Rv.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},Rv.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},Rv.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},Rv.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},Rv.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.editNodeMode=function(){return console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\"),this.manipulation.editNode.apply(this.manipulation,arguments)},Rv.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},Rv.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},Rv.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},Rv.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},Rv.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},Rv.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},Rv.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},Rv.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},Rv.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},Rv.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},Rv.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},Rv.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},Rv.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},Rv.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},Rv.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},Rv.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},Rv.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},Rv.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},Rv.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},Rv.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},Rv.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},Rv.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},Rv.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},Rv.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},Rv.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},Rv.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var qv=Object.freeze({__proto__:null,prepareElements:Lv,cleanupElements:Hv,resetElements:function(t){Lv(t),Hv(t),Lv(t)},getSVGElement:Wv,getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},drawPoint:function(t,e,i,n,o,r){var s;if(\"circle\"==i.style?((s=Wv(\"circle\",n,o)).setAttributeNS(null,\"cx\",t),s.setAttributeNS(null,\"cy\",e),s.setAttributeNS(null,\"r\",.5*i.size)):((s=Wv(\"rect\",n,o)).setAttributeNS(null,\"x\",t-.5*i.size),s.setAttributeNS(null,\"y\",e-.5*i.size),s.setAttributeNS(null,\"width\",i.size),s.setAttributeNS(null,\"height\",i.size)),void 0!==i.styles&&s.setAttributeNS(null,\"style\",i.styles),s.setAttributeNS(null,\"class\",i.className+\" vis-point\"),r){var a=Wv(\"text\",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,\"class\",r.className+\" vis-label\"),a.setAttributeNS(null,\"x\",t),a.setAttributeNS(null,\"y\",e)}return s},drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=Wv(\"rect\",r,s);h.setAttributeNS(null,\"x\",t-.5*i),h.setAttributeNS(null,\"y\",e),h.setAttributeNS(null,\"width\",i),h.setAttributeNS(null,\"height\",n),h.setAttributeNS(null,\"class\",o),a&&h.setAttributeNS(null,\"style\",a)}}}),Vv={Images:Zl,dotparser:Yl,gephiParser:Gl,allOptions:Av,convertDot:Ul,convertGephi:Xl},Uv=Object.freeze({__proto__:null,network:Vv,DOMutil:qv,util:fl,data:ou,Hammer:ll,keycharm:Tp,DataSet:tu,DataView:eu,Queue:Zc,Network:Rv});t.DOMutil=qv,t.DataSet=tu,t.DataView=eu,t.Hammer=ll,t.Network=Rv,t.Queue=Zc,t.data=ou,t.default=Uv,t.keycharm=Tp,t.network=Vv,t.util=fl,Object.defineProperty(t,\"__esModule\",{value:!0})}\n",
       "  // ));\n",
       "  // # sourceMappingURL=vis-network.min.js.map\n",
       "\n",
       "  );\n",
       "}\n",
       "\n",
       "\n",
       "    require([\"gravis-vis-network\"], function(vis){\n",
       "      // Strict mode: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode\n",
       "      \"use strict\";\n",
       "\n",
       "      const state = {\n",
       "        manager:{\n",
       "          // Data generation process: 1) Fetch state.rawData, 2) derive state.parsedData, 3) derive state.shownData\n",
       "\n",
       "          // 1) Fetch state.rawData\n",
       "          fetchRawDataFromTemplating(){\n",
       "            state.rawData = [{\"directed\": true, \"metadata\": {\"node_color\": \"blue\", \"node_opacity\": 1, \"node_size\": 10, \"node_shape\": \"circle\", \"node_border_color\": \"black\", \"node_border_size\": 1, \"node_label_color\": \"black\", \"node_label_size\": 10, \"edge_color\": \"green\", \"edge_opacity\": 1, \"edge_size\": 2, \"edge_shape\": \"circle\", \"edge_border_color\": \"#999\", \"edge_border_size\": 1, \"edge_label_color\": \"black\", \"edge_label_size\": 10, \"arrow_size\": 4, \"arrow_color\": \"#999\"}, \"nodes\": {\"tW7JvWUe8xx+0/9rqi7NAw\": {\"label\": \"Henry\", \"metadata\": {\"degree\": 3, \"label\": \"Henry\", \"size\": 30}}, \"DXOtmg7CCTMLmqmV826vJQ\": {\"label\": \"Charlie\", \"metadata\": {\"degree\": 1, \"label\": \"Charlie\", \"size\": 10}}, \"WmaiPY2n8xl0OD9oFzsmQg\": {\"label\": \"David\", \"metadata\": {\"degree\": 4, \"label\": \"David\", \"size\": 40}}, \"Mu5jzZr11d2/0c836vE/RQ\": {\"label\": \"Nancy\", \"metadata\": {\"degree\": 3, \"label\": \"Nancy\", \"size\": 30}}, \"+0JKlsJxRGKBYFiMq/o/Sg\": {\"label\": \"Alice\", \"metadata\": {\"degree\": 2, \"label\": \"Alice\", \"size\": 20}}, \"uA7RD0oPIwfSuk2XxzcGTA\": {\"label\": \"Frank\", \"metadata\": {\"degree\": 3, \"label\": \"Frank\", \"size\": 30}}, \"Ik76qp+fZDh2IZGEafB5Wg\": {\"label\": \"Mark\", \"metadata\": {\"degree\": 4, \"label\": \"Mark\", \"size\": 40}}, \"M5E9sdBCONNbZ4WimGhJag\": {\"label\": \"Grace\", \"metadata\": {\"degree\": 2, \"label\": \"Grace\", \"size\": 20}}, \"ru89MBnrLAPLQFVtoYdnfQ\": {\"label\": \"Bob\", \"metadata\": {\"degree\": 2, \"label\": \"Bob\", \"size\": 20}}, \"VRwGJEk1nrvw3GR8EBZTfw\": {\"label\": \"Kevin\", \"metadata\": {\"degree\": 1, \"label\": \"Kevin\", \"size\": 10}}, \"oUbJvaSF4pJaZZNBl9jUoA\": {\"label\": \"Emily\", \"metadata\": {\"degree\": 3, \"label\": \"Emily\", \"size\": 30}}, \"wskZA4orzCDIoY+02LmP1g\": {\"label\": \"Lily\", \"metadata\": {\"degree\": 2, \"label\": \"Lily\", \"size\": 20}}, \"SW7k0fQpo7Nl0AmEuLHQ8Q\": {\"label\": \"Oscar\", \"metadata\": {\"degree\": 2, \"label\": \"Oscar\", \"size\": 20}}}, \"edges\": [{\"source\": \"DXOtmg7CCTMLmqmV826vJQ\", \"target\": \"WmaiPY2n8xl0OD9oFzsmQg\", \"metadata\": {}}, {\"source\": \"WmaiPY2n8xl0OD9oFzsmQg\", \"target\": \"oUbJvaSF4pJaZZNBl9jUoA\", \"metadata\": {}}, {\"source\": \"Mu5jzZr11d2/0c836vE/RQ\", \"target\": \"wskZA4orzCDIoY+02LmP1g\", \"metadata\": {}}, {\"source\": \"+0JKlsJxRGKBYFiMq/o/Sg\", \"target\": \"WmaiPY2n8xl0OD9oFzsmQg\", \"metadata\": {}}, {\"source\": \"+0JKlsJxRGKBYFiMq/o/Sg\", \"target\": \"ru89MBnrLAPLQFVtoYdnfQ\", \"metadata\": {}}, {\"source\": \"uA7RD0oPIwfSuk2XxzcGTA\", \"target\": \"tW7JvWUe8xx+0/9rqi7NAw\", \"metadata\": {}}, {\"source\": \"uA7RD0oPIwfSuk2XxzcGTA\", \"target\": \"M5E9sdBCONNbZ4WimGhJag\", \"metadata\": {}}, {\"source\": \"Ik76qp+fZDh2IZGEafB5Wg\", \"target\": \"Mu5jzZr11d2/0c836vE/RQ\", \"metadata\": {}}, {\"source\": \"Ik76qp+fZDh2IZGEafB5Wg\", \"target\": \"SW7k0fQpo7Nl0AmEuLHQ8Q\", \"metadata\": {}}, {\"source\": \"M5E9sdBCONNbZ4WimGhJag\", \"target\": \"tW7JvWUe8xx+0/9rqi7NAw\", \"metadata\": {}}, {\"source\": \"ru89MBnrLAPLQFVtoYdnfQ\", \"target\": \"WmaiPY2n8xl0OD9oFzsmQg\", \"metadata\": {}}, {\"source\": \"VRwGJEk1nrvw3GR8EBZTfw\", \"target\": \"Ik76qp+fZDh2IZGEafB5Wg\", \"metadata\": {}}, {\"source\": \"oUbJvaSF4pJaZZNBl9jUoA\", \"target\": \"tW7JvWUe8xx+0/9rqi7NAw\", \"metadata\": {}}, {\"source\": \"oUbJvaSF4pJaZZNBl9jUoA\", \"target\": \"uA7RD0oPIwfSuk2XxzcGTA\", \"metadata\": {}}, {\"source\": \"wskZA4orzCDIoY+02LmP1g\", \"target\": \"Ik76qp+fZDh2IZGEafB5Wg\", \"metadata\": {}}, {\"source\": \"SW7k0fQpo7Nl0AmEuLHQ8Q\", \"target\": \"Mu5jzZr11d2/0c836vE/RQ\", \"metadata\": {}}]}];\n",
       "            // Data selection and normalization\n",
       "            state.nodeSizeDataSource = \"size\";\n",
       "            state.useNodeSizeNormalization = false;\n",
       "            state.nodeSizeNormalizationMin = 5.0;\n",
       "            state.nodeSizeNormalizationMax = 75.0;\n",
       "            state.nodeLabelTextDataSource = \"label\";\n",
       "            state.edgeSizeDataSource = \"size\";\n",
       "            state.useEdgeSizeNormalization = false;\n",
       "            state.edgeSizeNormalizationMin = 0.2;\n",
       "            state.edgeSizeNormalizationMax = 5.0;\n",
       "            state.edgeLabelTextDataSource = \"label\";\n",
       "            // Containers\n",
       "            state.graphContainerHeight = 450;\n",
       "            state.detailsContainerHeight = 100;\n",
       "            state.showDetails = false,\n",
       "            state.showDetailsToggleButton = true,\n",
       "            state.showMenu = false,\n",
       "            state.showMenuToggleButton = true,\n",
       "            // Nodes\n",
       "            state.showNodes = true;\n",
       "            state.nodeSizeFactor = 1.0;\n",
       "            state.nodeDragFix = false;\n",
       "            state.nodeHoverNeighborhood = false;\n",
       "            state.nodeHoverTooltip = true;\n",
       "            state.showNodeImages = true;\n",
       "            state.nodeImageSizeFactor = 1.0;\n",
       "            state.showNodeLabels = true;\n",
       "            state.showNodeLabelBorders = true;\n",
       "            state.nodeLabelSizeFactor = 1.0;\n",
       "            state.nodeLabelRotation = 0.0;\n",
       "            state.nodeLabelFont = \"Arial\";\n",
       "            // Edges\n",
       "            state.showEdges = true;\n",
       "            state.edgeSizeFactor = 1.0;\n",
       "            state.edgeCurvature = 0.4;\n",
       "            state.edgeHoverTooltip = true,\n",
       "            state.showEdgeLabels = true;\n",
       "            state.showEdgeLabelBorders = true;\n",
       "            state.edgeLabelSizeFactor = 1.0;\n",
       "            state.edgeLabelRotation = 0.0;\n",
       "            state.edgeLabelFont = \"Arial\";\n",
       "            // Layout algorithm\n",
       "            state.layoutAlgorithmActive = true;\n",
       "            state.layoutAlgorithm = \"barnesHut\";\n",
       "            state.gravitationalConstant = -2000.0;\n",
       "            state.centralGravity = 0.1;\n",
       "            state.springLength = 70.0;\n",
       "            state.springConstant = 0.1;\n",
       "            state.avoidOverlap = 0.0;\n",
       "            // Other\n",
       "            state.initZoomFactor = 0.75;\n",
       "            state.largeGraphThreshold = 500;\n",
       "          },\n",
       "\n",
       "          // 2) Derive state.parsedData from state.givenData\n",
       "          rawDataParser:{\n",
       "            getBool(obj, prop, def){\n",
       "              try{\n",
       "                const value = obj[prop];\n",
       "                if(value == \"true\" || value == \"True\"){\n",
       "                  value = true;\n",
       "                } else if(value == \"false\" || value == \"False\"){\n",
       "                  value = false;\n",
       "                }\n",
       "                if(value !== true && value !== false){\n",
       "                  throw \"Invalid value. Not a bool.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def\n",
       "            },\n",
       "\n",
       "            getString(obj, prop, def) {\n",
       "              try{\n",
       "                const value = String(obj[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "              return def;\n",
       "            },\n",
       "\n",
       "            getArrayLengthOrZero(array){\n",
       "              try{\n",
       "                const value = parseInt(array.length);\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            getObjectLengthOrZero(obj){\n",
       "              try{\n",
       "                const value = Object.keys(obj).length;\n",
       "                if(!((value + 1) > 0)){\n",
       "                  throw \"Invalid value. Not a proper length.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return 0;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            createUniqueEdgeId(sourceId, targetId, knownEdgeIds){\n",
       "              let newEdgeIdBase = \"(\" + sourceId + \", \" + targetId + \")\",\n",
       "                newEdgeId = newEdgeIdBase,\n",
       "                multiEdgeCounter = 1;\n",
       "              for(let i=1; knownEdgeIds.has(newEdgeId); i++){\n",
       "                newEdgeId = newEdgeIdBase + \"_\" + String(i);\n",
       "                multiEdgeCounter += 1;\n",
       "              }\n",
       "              knownEdgeIds.add(newEdgeId);\n",
       "              return {\"id\": newEdgeId, \"count\": multiEdgeCounter}\n",
       "            },\n",
       "          },\n",
       "\n",
       "          rawMetadataParser:{\n",
       "            getString(obj, prop, def){\n",
       "              try{\n",
       "                const value = String(obj.metadata[prop]);\n",
       "                if(value === \"undefined\"){\n",
       "                  throw \"Invalid value. Not a proper string.\";\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getShape(obj, prop, def){\n",
       "              const givenShape = state.manager.rawMetadataParser.getString(obj, prop, def);\n",
       "              let visShape = def;\n",
       "              if(givenShape === \"circle\"){\n",
       "                visShape = \"dot\";\n",
       "              } else if(givenShape === \"rectangle\"){\n",
       "                visShape = \"square\";\n",
       "              } else if(givenShape === \"hexagon\"){\n",
       "                visShape = \"hexagon\";\n",
       "              }\n",
       "              return visShape;\n",
       "            },\n",
       "            getColor(obj, prop, def){\n",
       "              function isBodyidColor(strColor) {\n",
       "                const sty = new Option().style;\n",
       "                sty.color = strColor;\n",
       "                return sty.color !== \"\";\n",
       "              }\n",
       "              try{\n",
       "                const value = obj.metadata[prop];\n",
       "                if(!isBodyidColor(value)){\n",
       "                  throw \"Invalid value. Not a color.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null){\n",
       "                  throw \"Invalid value. Not a finite number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFiniteNumberOrNull(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value)){  // Note: isFinite(null) gives true\n",
       "                  throw \"Invalid value. Not a finite number or null.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            getFinitePositiveNumber(obj, prop, def){\n",
       "              try{\n",
       "                const value = parseFloat(obj.metadata[prop]);\n",
       "                if(!isFinite(value) || value === null || value < 0.0){\n",
       "                  throw \"Invalid value. Not a finite positive number.\"\n",
       "                }\n",
       "                return value;\n",
       "              } catch(e){\n",
       "                return def;\n",
       "              }\n",
       "            },\n",
       "            collectOtherMetadata(sourceObject, targetObject, definedMetadata){\n",
       "              if(typeof(sourceObject) !== \"undefined\" && typeof(sourceObject.metadata) !== \"undefined\"){\n",
       "                const properties = Object.keys(sourceObject.metadata);\n",
       "                for(let i=0; i<properties.length; i++){\n",
       "                  const property = properties[i];\n",
       "                  if(!definedMetadata.has(property)){\n",
       "                    targetObject[property] = sourceObject.metadata[property];\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          propertyClassifier:{\n",
       "            numeric: null,\n",
       "            nonNumeric: null,\n",
       "            init(){\n",
       "              this.numeric = new Set(),\n",
       "              this.nonNumeric = new Set();\n",
       "            },\n",
       "            isNumeric(d){\n",
       "              return d === null || typeof(d) === \"undefined\" || String(parseFloat(d)) === String(d);\n",
       "            },\n",
       "            inspect(object, property){\n",
       "              const value = object[property];\n",
       "              if(!this.nonNumeric.has(property)){\n",
       "                if(this.isNumeric(value)){\n",
       "                  this.numeric.add(property);\n",
       "                } else{\n",
       "                  this.nonNumeric.add(property);\n",
       "                  this.numeric.delete(property);\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "          },\n",
       "\n",
       "          replaceStringVariables(givenString, givenItem, variables){\n",
       "            let newString = givenString;\n",
       "            for(let i=0; i<variables.length; i++){\n",
       "              let variable = variables[i],\n",
       "                variableText = \"$\" + variable;\n",
       "              if(variable === \"x\"){\n",
       "                variable = \"fx\";\n",
       "              } else if (variable === \"y\"){\n",
       "                variable = \"fy\";\n",
       "              }\n",
       "              let insertedText = String(givenItem[variable]);\n",
       "              if(insertedText === \"undefined\"){\n",
       "                insertedText = \"\";\n",
       "              }\n",
       "              newString = newString.replace(variableText, insertedText);\n",
       "            }\n",
       "            return newString;\n",
       "          },\n",
       "\n",
       "          parseGeneral(givenData, parsedData){\n",
       "            parsedData.general = {\n",
       "              // General\n",
       "              directed: state.manager.rawDataParser.getBool(givenData, \"directed\", true),\n",
       "              label: state.manager.rawDataParser.getString(givenData, \"label\", \"\"),\n",
       "              background_color: state.manager.rawMetadataParser.getColor(givenData, \"background_color\", \"white\"),\n",
       "              arrow_color: state.manager.rawMetadataParser.getColor(givenData, \"arrow_color\", \"black\"),\n",
       "              arrow_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"arrow_size\", 10.0),\n",
       "              // Nodes\n",
       "              node_color: state.manager.rawMetadataParser.getColor(givenData, \"node_color\", \"black\"),\n",
       "              node_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_opacity\", 1.0),\n",
       "              node_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_size\", 10.0),\n",
       "              node_shape: state.manager.rawMetadataParser.getString(givenData, \"node_shape\", \"circle\"),\n",
       "              node_border_color: state.manager.rawMetadataParser.getColor(givenData, \"node_border_color\", \"black\"),\n",
       "              node_border_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_border_size\", 0.0),\n",
       "              node_label_color: state.manager.rawMetadataParser.getColor(givenData, \"node_label_color\", \"black\"),\n",
       "              node_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"node_label_size\", 12.0),\n",
       "              node_hover: state.manager.rawMetadataParser.getString(givenData, \"node_hover\", \"\"),\n",
       "              node_click: state.manager.rawMetadataParser.getString(givenData, \"node_click\", \"\"),\n",
       "              node_image: state.manager.rawMetadataParser.getString(givenData, \"node_image\", \"\"),\n",
       "              node_x: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_x\", null),\n",
       "              node_y: state.manager.rawMetadataParser.getFiniteNumberOrNull(givenData, \"node_y\", null),\n",
       "              contains_node_hover: false,\n",
       "              contains_node_click: false,\n",
       "              contains_node_image: false,\n",
       "              // Edges\n",
       "              edge_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_color\", \"black\"),\n",
       "              edge_opacity: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_opacity\", 1.0),\n",
       "              edge_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_size\", 1.0),\n",
       "              edge_label_color: state.manager.rawMetadataParser.getColor(givenData, \"edge_label_color\", \"black\"),\n",
       "              edge_label_size: state.manager.rawMetadataParser.getFinitePositiveNumber(givenData, \"edge_label_size\", 8.0),\n",
       "              edge_hover: state.manager.rawMetadataParser.getString(givenData, \"edge_hover\", \"\"),\n",
       "              edge_click: state.manager.rawMetadataParser.getString(givenData, \"edge_click\", \"\"),\n",
       "              contains_edge_hover: false,\n",
       "              contains_edge_click: false,\n",
       "            };\n",
       "            if(!parsedData.general.directed){\n",
       "              parsedData.general.arrow_size = 0.0;\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseNodes(givenData, parsedData){\n",
       "            const numNodes = state.manager.rawDataParser.getObjectLengthOrZero(givenData.nodes),\n",
       "              nodeIdToObjectMap = new Map(),\n",
       "              nodeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                 \"label_color\", \"label_size\", \"hover\", \"click\", \"image\", \"x\", \"y\"]),\n",
       "              nodeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"shape\", \"border_color\", \"border_size\",\n",
       "                \"label_color\", \"label_size\", \"image\", \"x\", \"y\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            try {\n",
       "              Object.entries(givenData.nodes);\n",
       "            }\n",
       "            catch(e){\n",
       "               givenData.nodes = {};\n",
       "            }\n",
       "            for (const [givenNodeId, givenNode] of Object.entries(givenData.nodes)) {\n",
       "              const parsedNode = {};\n",
       "              // data: id, label\n",
       "              parsedNode.id = String(givenNodeId);\n",
       "              parsedNode.label = state.manager.rawDataParser.getString(givenNode, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedNode.color = state.manager.rawMetadataParser.getColor(givenNode, \"color\", parsedData.general.node_color);\n",
       "              parsedNode.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"opacity\", parsedData.general.node_opacity);\n",
       "              parsedNode.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"size\", parsedData.general.node_size);\n",
       "              parsedNode.shape = state.manager.rawMetadataParser.getShape(givenNode, \"shape\", parsedData.general.node_shape);\n",
       "              parsedNode.border_color = state.manager.rawMetadataParser.getColor(givenNode, \"border_color\", parsedData.general.node_border_color);\n",
       "              parsedNode.border_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"border_size\", parsedData.general.node_border_size);\n",
       "              parsedNode.label_color = state.manager.rawMetadataParser.getColor(givenNode, \"label_color\", parsedData.general.node_label_color);\n",
       "              parsedNode.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenNode, \"label_size\", parsedData.general.node_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenNode, \"hover\", parsedData.general.node_hover);\n",
       "              const image = state.manager.rawMetadataParser.getString(givenNode, \"image\", parsedData.general.node_image);\n",
       "              if(image !== \"\"){\n",
       "                parsedNode.image = image;\n",
       "                parsedData.general.contains_node_image = true;\n",
       "              }\n",
       "              if(hover !== \"\"){\n",
       "                parsedNode.hover = hover;\n",
       "                parsedData.general.contains_node_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenNode, \"click\", parsedData.general.node_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedNode.click = click;\n",
       "                parsedData.general.contains_node_click = true;\n",
       "              }\n",
       "              const x = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"x\", parsedData.general.node_x);\n",
       "              const y = state.manager.rawMetadataParser.getFiniteNumberOrNull(givenNode, \"y\", parsedData.general.node_y);\n",
       "              if(x !== null){\n",
       "                parsedNode.fx = x;\n",
       "              }\n",
       "              if(y !== null){\n",
       "                parsedNode.fy = y;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenNode, parsedNode, nodeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedNodeProperties = Object.keys(parsedNode);\n",
       "              for(let i=0; i<parsedNodeProperties.length; i++){\n",
       "                const property = parsedNodeProperties[i],\n",
       "                  value = parsedNode[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedNode, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedNode.hover){\n",
       "                parsedNode.hover = state.manager.replaceStringVariables(parsedNode.hover, parsedNode, nodeReplacementVariables);\n",
       "              }\n",
       "              if(parsedNode.click){\n",
       "                parsedNode.click = state.manager.replaceStringVariables(parsedNode.click, parsedNode, nodeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store the parsed node\n",
       "              parsedData.nodes.push(parsedNode);\n",
       "              // data structure for inserting node object references into edge data\n",
       "              nodeIdToObjectMap.set(parsedNode.id, parsedNode);\n",
       "            }\n",
       "            // Ensure numeric properties (except fx and fy) are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric).filter(name => name !== \"fx\" && name !== \"fy\"),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              const parsedNode = parsedData.nodes[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedNode[property]);\n",
       "                parsedNode[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.node_properties = {\n",
       "              \"node_size_data_sources\": numericProperties,\n",
       "              \"node_label_text_data_sources\": nonNumericProperties.concat(numericProperties),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report empty graph\n",
       "            if(!(numNodes > 0)){\n",
       "              console.log(\"Caution: Graph with 0 nodes. The provided data might be in the wrong format.\");\n",
       "            }\n",
       "            return nodeIdToObjectMap;\n",
       "          },\n",
       "\n",
       "          parseEdges(givenData, parsedData, nodeIdToObjectMap){\n",
       "            let numEdges = state.manager.rawDataParser.getArrayLengthOrZero(givenData.edges);\n",
       "            const knownEdgeIds = new Set(),\n",
       "              ignoredEdges = [],\n",
       "              edgeDefinedMetadata = new Set(\n",
       "                [\"color\", \"opacity\", \"size\", \"label_color\", \"label_size\", \"hover\", \"click\"]),\n",
       "              edgeReplacementVariables = [\n",
       "                \"id\", \"label\",\n",
       "                \"color\", \"opacity\", \"size\", \"label_color\", \"label_size\"];\n",
       "            state.manager.propertyClassifier.init();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const givenEdge = givenData.edges[i],\n",
       "                parsedEdge = {},\n",
       "                sourceId = String(givenEdge.source),\n",
       "                targetId = String(givenEdge.target);\n",
       "              // data: source, target, id, multi_edge_counter, label\n",
       "              try{\n",
       "                const sourceObj = nodeIdToObjectMap.get(sourceId);\n",
       "                const targetObj = nodeIdToObjectMap.get(targetId);\n",
       "                if(typeof(sourceObj) === \"undefined\" || typeof(targetObj) === \"undefined\"){\n",
       "                  throw \"Invalid node reference.\";\n",
       "                }\n",
       "                parsedEdge.source = sourceObj;\n",
       "                parsedEdge.target = targetObj;\n",
       "              } catch(e){\n",
       "                const ignoredEdge = {\n",
       "                  index: i,\n",
       "                  source: sourceId,\n",
       "                  target: targetId,\n",
       "                }\n",
       "                ignoredEdges.push(ignoredEdge);\n",
       "                continue;\n",
       "              }\n",
       "              const result = state.manager.rawDataParser.createUniqueEdgeId(sourceId, targetId, knownEdgeIds);\n",
       "              parsedEdge.id = result.id;\n",
       "              parsedEdge.multi_edge_counter = result.count;\n",
       "              parsedEdge.label = state.manager.rawDataParser.getString(givenEdge, \"label\", \"\");\n",
       "              // defined metadata\n",
       "              parsedEdge.color = state.manager.rawMetadataParser.getColor(givenEdge, \"color\", parsedData.general.edge_color);\n",
       "              parsedEdge.opacity = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"opacity\", parsedData.general.edge_opacity);\n",
       "              parsedEdge.size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"size\", parsedData.general.edge_size);\n",
       "              parsedEdge.label_color = state.manager.rawMetadataParser.getColor(givenEdge, \"label_color\", parsedData.general.edge_label_color);\n",
       "              parsedEdge.label_size = state.manager.rawMetadataParser.getFinitePositiveNumber(givenEdge, \"label_size\", parsedData.general.edge_label_size);\n",
       "              const hover = state.manager.rawMetadataParser.getString(givenEdge, \"hover\", parsedData.general.edge_hover);\n",
       "              if(hover !== \"\"){\n",
       "                parsedEdge.hover = hover;\n",
       "                parsedData.general.contains_edge_hover = true;\n",
       "              }\n",
       "              const click = state.manager.rawMetadataParser.getString(givenEdge, \"click\", parsedData.general.edge_click);\n",
       "              if(click !== \"\"){\n",
       "                parsedEdge.click = click;\n",
       "                parsedData.general.contains_edge_click = true;\n",
       "              }\n",
       "              // other metadata\n",
       "              const otherMetadata = state.manager.rawMetadataParser.collectOtherMetadata(givenEdge, parsedEdge, edgeDefinedMetadata);\n",
       "              // feature classification\n",
       "              const parsedEdgeProperties = Object.keys(parsedEdge);\n",
       "              for(let i=0; i<parsedEdgeProperties.length; i++){\n",
       "                const property = parsedEdgeProperties[i],\n",
       "                  value = parsedEdge[property];\n",
       "                state.manager.propertyClassifier.inspect(parsedEdge, property);\n",
       "              }\n",
       "              // variable replacements\n",
       "              if(parsedEdge.hover){\n",
       "                parsedEdge.hover = state.manager.replaceStringVariables(parsedEdge.hover, parsedEdge, edgeReplacementVariables);\n",
       "              }\n",
       "              if(parsedEdge.click){\n",
       "                parsedEdge.click = state.manager.replaceStringVariables(parsedEdge.click, parsedEdge, edgeReplacementVariables.concat([\"hover\"]));\n",
       "              }\n",
       "              // store it\n",
       "              parsedData.edges.push(parsedEdge);\n",
       "            }\n",
       "            // Ensure numeric properties are stored as numbers and remember their extrema\n",
       "            const numericProperties = Array.from(state.manager.propertyClassifier.numeric),\n",
       "              nonNumericProperties = Array.from(state.manager.propertyClassifier.nonNumeric),\n",
       "              minima = {},\n",
       "              maxima = {};\n",
       "            numEdges = state.manager.rawDataParser.getArrayLengthOrZero(parsedData.edges);\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              const parsedEdge = parsedData.edges[i];\n",
       "              for(let p=0; p<numericProperties.length; p++){\n",
       "                const property = numericProperties[p],\n",
       "                  numericValue = parseFloat(parsedEdge[property]);\n",
       "                parsedEdge[property] = numericValue;\n",
       "                if(isFinite(numericValue)){\n",
       "                  if(typeof(minima[property]) === \"undefined\" || numericValue < minima[property]){\n",
       "                    minima[property] = numericValue;\n",
       "                  }\n",
       "                  if(typeof(maxima[property]) === \"undefined\" || numericValue > maxima[property]){\n",
       "                    maxima[property] = numericValue;\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "            }\n",
       "            // Store feature classification and extrema\n",
       "            parsedData.general.edge_properties = {\n",
       "              \"edge_size_data_sources\": numericProperties.filter(item => item !== \"multi_edge_counter\"),\n",
       "              \"edge_label_text_data_sources\": nonNumericProperties.concat(numericProperties).filter(\n",
       "                item => item !== \"source\" && item !== \"target\" && item !== \"multi_edge_counter\"),\n",
       "              \"minima\": minima,\n",
       "              \"maxima\": maxima,\n",
       "            }\n",
       "            // Report invalid edges\n",
       "            if(ignoredEdges.length > 0){\n",
       "              let message = undefined;\n",
       "              if(ignoredEdges.length == 1){\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edge was ignored because it \" +\n",
       "                  \"refers to a node that is not part of the node list:\\n\";\n",
       "              } else{\n",
       "                message = \"Caution: \" + ignoredEdges.length + \" edges were ignored because they \" +\n",
       "                  \"refer to a node that is not part of the node list:\\n\";\n",
       "              }\n",
       "              for(let i=0; i<ignoredEdges.length; i++){\n",
       "                const ignoredEdge = ignoredEdges[i];\n",
       "                message += '- Edge with index ' + ignoredEdge.index;\n",
       "                message += ', source \"' + ignoredEdge.source;\n",
       "                message += '\", target \"' + ignoredEdge.target + '\"\\n';\n",
       "                if(i==9){\n",
       "                  message += '...';\n",
       "                  break;\n",
       "                }\n",
       "              }\n",
       "              console.log(message);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          parseChosenData(chosenGraphNumber){\n",
       "            let givenData = state.rawData[chosenGraphNumber],\n",
       "              parsedData = {\n",
       "                general: {},\n",
       "                nodes: [],\n",
       "                edges: [],\n",
       "                adjacency: null,\n",
       "                incidence: null,\n",
       "              };\n",
       "            if(!givenData || givenData === null){\n",
       "              givenData = [];\n",
       "            }\n",
       "            // a) General\n",
       "            state.manager.parseGeneral(givenData, parsedData);\n",
       "            // b) Nodes\n",
       "            const nodeIdToObjectMap = state.manager.parseNodes(givenData, parsedData);\n",
       "            // c) Edges\n",
       "            state.manager.parseEdges(givenData, parsedData, nodeIdToObjectMap);\n",
       "            // Update state\n",
       "            state.parsedData = parsedData;\n",
       "            state.currentGraphParts = {};\n",
       "            // Update UI: show or hide containers\n",
       "            ui.elements.graphContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            ui.elements.detailsContainer.style.display = ui.convert.boolToDisplayStyle(state.showDetails);\n",
       "            ui.elements.nodeImageMetaControl.style.display = ui.convert.boolToDisplayStyle(parsedData.general.contains_node_image);\n",
       "          },\n",
       "\n",
       "          // 3) Derive state.shownData from state.parsedData\n",
       "          createNodeToAdjacentNodesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(sourceNode, targetNode){\n",
       "                let adjacentNodes = this.map.get(sourceNode);\n",
       "                if(adjacentNodes){\n",
       "                  adjacentNodes.add(targetNode);\n",
       "                } else{\n",
       "                  adjacentNodes = new Set([targetNode]);\n",
       "                  this.map.set(sourceNode, adjacentNodes);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          createNodeToIncidentEdgesMap(){\n",
       "            const dataStructure = {\n",
       "              map: new Map(),\n",
       "              add(node, edge){\n",
       "                let incidentEdges = this.map.get(node);\n",
       "                if(incidentEdges){\n",
       "                  incidentEdges.add(edge);\n",
       "                } else{\n",
       "                  incidentEdges = new Set([edge]);\n",
       "                  this.map.set(node, incidentEdges);\n",
       "                }\n",
       "              },\n",
       "            }\n",
       "            return dataStructure;\n",
       "          },\n",
       "\n",
       "          hoverTextToHtml(text) {\n",
       "            // https://visjs.github.io/vis-network/examples/network/other/html-in-titles.html\n",
       "            const div = document.createElement(\"div\");\n",
       "            div.innerHTML = text;\n",
       "            return div;\n",
       "          },\n",
       "\n",
       "          prepareShownData(){\n",
       "            const numNodes = state.parsedData.nodes.length,\n",
       "              numEdges = state.parsedData.edges.length;\n",
       "            state.shownData = {\n",
       "              \"general\": null,\n",
       "              \"nodes\": new Array(numNodes),\n",
       "              \"edges\": new Array(numEdges),\n",
       "            }\n",
       "            const nodeIdToObjectMap = new Map(),\n",
       "              nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            // a) General\n",
       "            state.shownData.general = {\n",
       "              \"background_color\": state.parsedData.general.background_color,\n",
       "              \"arrow_size\": state.parsedData.general.arrow_size,\n",
       "              \"arrow_color\": state.parsedData.general.arrow_color,\n",
       "              \"directed\": state.parsedData.general.directed,\n",
       "            };\n",
       "            // b) Nodes\n",
       "            for(let i=0; i<numNodes; i++){\n",
       "              state.shownData.nodes[i] = {};\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.id = parsedNode.id;\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "              shownNode.color = parsedNode.color;\n",
       "              shownNode.opacity = parsedNode.opacity;\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              shownNode.shape = parsedNode.shape;\n",
       "              shownNode.border_color = parsedNode.border_color;\n",
       "              shownNode.border_size = parsedNode.border_size;\n",
       "              shownNode.label_color = parsedNode.label_color;\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "              if(typeof(parsedNode.image) !== \"undefined\"){\n",
       "                shownNode.image = parsedNode.image;\n",
       "              }\n",
       "              if(typeof(parsedNode.hover) !== \"undefined\"){\n",
       "                shownNode.hover = state.manager.hoverTextToHtml(parsedNode.hover);\n",
       "              }\n",
       "              if(typeof(parsedNode.click) !== \"undefined\"){\n",
       "                shownNode.click = parsedNode.click;\n",
       "              }\n",
       "              if(typeof(parsedNode.fx) !== \"undefined\"){\n",
       "                shownNode.fx = parsedNode.fx;\n",
       "              }\n",
       "              if(typeof(parsedNode.fy) !== \"undefined\"){\n",
       "                shownNode.fy = parsedNode.fy;\n",
       "              }\n",
       "              nodeIdToObjectMap.set(shownNode.id, shownNode);\n",
       "              // Derived properties for performance improvement in updateNodePositions\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "              state.manager.calcSingleNodeBorderSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // c) Edges\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer(),\n",
       "              nodeToAdjacentNodesMap = state.manager.createNodeToAdjacentNodesMap(),\n",
       "              nodeToIncidentEdgesMap = state.manager.createNodeToIncidentEdgesMap();\n",
       "            for(let i=0; i<numEdges; i++){\n",
       "              state.shownData.edges[i] = {};\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.source = nodeIdToObjectMap.get(parsedEdge.source.id);\n",
       "              shownEdge.target = nodeIdToObjectMap.get(parsedEdge.target.id);\n",
       "              shownEdge.id = parsedEdge.id;\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "              shownEdge.color = parsedEdge.color;\n",
       "              shownEdge.opacity = parsedEdge.opacity;\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "              shownEdge.label_color = parsedEdge.label_color;\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "              if(typeof(parsedEdge.hover) !== \"undefined\"){\n",
       "                shownEdge.hover = state.manager.hoverTextToHtml(parsedEdge.hover);\n",
       "              }\n",
       "              if(typeof(parsedEdge.click) !== \"undefined\"){\n",
       "                shownEdge.click = parsedEdge.click;\n",
       "              }\n",
       "              // Derived properties for performance improvement in updateEdgePositions\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "              // Data structure for highlighting adjacent nodes and incident edges to this node\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.source, shownEdge.target);\n",
       "              nodeToAdjacentNodesMap.add(shownEdge.target, shownEdge.source);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.source, shownEdge);\n",
       "              nodeToIncidentEdgesMap.add(shownEdge.target, shownEdge);\n",
       "            }\n",
       "            state.shownData.adjacency = nodeToAdjacentNodesMap;\n",
       "            state.shownData.incidence = nodeToIncidentEdgesMap;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSize(parsedNode, nodeSizeNormalizer){\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            let nodeSize = nodeSizeNormalizer(parsedNode[state.nodeSizeDataSource]);\n",
       "            if(!isFinite(nodeSize)){\n",
       "              nodeSize = state.parsedData.general.node_size;\n",
       "            }\n",
       "            return nodeSize * state.nodeSizeFactor * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeSizeDerivatives(shownNode){\n",
       "            shownNode.image_size = shownNode.size / 1.42 * state.nodeImageSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelText(parsedNode){\n",
       "            return String(parsedNode[state.nodeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleNodeLabelSize(parsedNode){\n",
       "            return parsedNode.label_size * state.nodeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer){\n",
       "            let edgeSize = edgeSizeNormalizer(parsedEdge[state.edgeSizeDataSource]);\n",
       "            if(!isFinite(edgeSize)){\n",
       "              edgeSize = state.parsedData.general.edge_size;\n",
       "            }\n",
       "            return edgeSize * state.edgeSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeCurvatureFactor(parsedEdge){\n",
       "            // Caution: Currently a single value is used for all edges instead of these here\n",
       "            const appearanceAdaptionFactor = 0.5;\n",
       "            return state.edgeCurvature * parsedEdge.multiEdgeCounter * appearanceAdaptionFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelText(parsedEdge){\n",
       "            return String(parsedEdge[state.edgeLabelTextDataSource]);\n",
       "          },\n",
       "\n",
       "          calcSingleEdgeLabelSize(parsedEdge){\n",
       "            return parsedEdge.label_size * state.edgeLabelSizeFactor;\n",
       "          },\n",
       "\n",
       "          calcSingleNodeBorderSizeDerivatives(shownNode){\n",
       "            shownNode.border_size_half = shownNode.border_size / 2.0;\n",
       "          },\n",
       "\n",
       "          createNodeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useNodeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.node_properties.minima[state.nodeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.node_properties.maxima[state.nodeSizeDataSource],\n",
       "                targetMin = state.nodeSizeNormalizationMin,\n",
       "                targetMax = state.nodeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor) || factor === null){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          createEdgeSizeNormalizer(){\n",
       "            let normalizer;\n",
       "            if(state.useEdgeSizeNormalization){\n",
       "              const dataMin = state.parsedData.general.edge_properties.minima[state.edgeSizeDataSource],\n",
       "                dataMax = state.parsedData.general.edge_properties.maxima[state.edgeSizeDataSource],\n",
       "                targetMin = state.edgeSizeNormalizationMin,\n",
       "                targetMax = state.edgeSizeNormalizationMax,\n",
       "                dataDiff = dataMax - dataMin,\n",
       "                targetDiff = targetMax - targetMin;\n",
       "              let factor = targetDiff / dataDiff;\n",
       "              if(!isFinite(factor)){\n",
       "                factor = 0.0;\n",
       "              }\n",
       "              normalizer = function(val){\n",
       "                return (val - dataMin) * factor + targetMin;\n",
       "              }\n",
       "            } else{\n",
       "              normalizer = function(val){\n",
       "                return val;\n",
       "              }\n",
       "            }\n",
       "            return normalizer;\n",
       "          },\n",
       "\n",
       "          updateNodeSizes(){\n",
       "            // Data\n",
       "            const nodeSizeNormalizer = state.manager.createNodeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.size = state.manager.calcSingleNodeSize(parsedNode, nodeSizeNormalizer);\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeSizes();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label = state.manager.calcSingleNodeLabelText(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              shownNode.label_size = state.manager.calcSingleNodeLabelSize(parsedNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          },\n",
       "\n",
       "          updateNodeImages(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.nodes.length; i++){\n",
       "              const parsedNode = state.parsedData.nodes[i],\n",
       "                shownNode = state.shownData.nodes[i];\n",
       "              state.manager.calcSingleNodeSizeDerivatives(shownNode);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateNodeImages();\n",
       "          },\n",
       "\n",
       "          updateEdgeSizes(){\n",
       "            // Data\n",
       "            const edgeSizeNormalizer = state.manager.createEdgeSizeNormalizer();\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.size = state.manager.calcSingleEdgeSize(parsedEdge, edgeSizeNormalizer);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeSizes();\n",
       "          },\n",
       "\n",
       "          updateEdgeCurvatures(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.multiEdgeCurvatureFactor = state.manager.calcSingleEdgeCurvatureFactor(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeCurvatures();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelTexts(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label = state.manager.calcSingleEdgeLabelText(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "\n",
       "          updateEdgeLabelSizes(){\n",
       "            // Data\n",
       "            for(let i=0; i<state.parsedData.edges.length; i++){\n",
       "              const parsedEdge = state.parsedData.edges[i],\n",
       "                shownEdge = state.shownData.edges[i];\n",
       "              shownEdge.label_size = state.manager.calcSingleEdgeLabelSize(parsedEdge);\n",
       "            }\n",
       "            // UI\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          },\n",
       "        }\n",
       "      }\n",
       "\n",
       "      const ui = {\n",
       "        symbols:{\n",
       "          // Choice of symbols is influenced by their appearance in different browsers\n",
       "          // Alternatives: \"▼\", \"▽\", \"▾\" / \"▲\", \"△\", \"▴\" / \"▶\", \"▷\", \"▸\" / \"◀\", \"◁\", \"◂\"\n",
       "          // ▶ is rendered strangely on some mobile phone browsers, ▸ remains normal\n",
       "          detailsShown: \"▾\",\n",
       "          detailsHidden: \"▴\",\n",
       "          menuShown: \"▸\",\n",
       "          menuHidden: \"◂\",\n",
       "          menuItemActive: \"▸\",\n",
       "          menuItemInactive: \"▾\",\n",
       "        },\n",
       "\n",
       "        elements:{\n",
       "          // Containers\n",
       "          mainContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-main-div\"),\n",
       "          tooltipContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-tooltip-div\"),\n",
       "          leftContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-left-div\"),\n",
       "          rightContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-right-div\"),\n",
       "          graphContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-graph-div\"),\n",
       "          detailsContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-details-div\"),\n",
       "          detailsHead: document.getElementById(\"iyhTGFxv1QMD11hGy-details-head\"),\n",
       "          detailsBody: document.getElementById(\"iyhTGFxv1QMD11hGy-details-body\"),\n",
       "          // Data sources\n",
       "          dataHead: document.getElementById(\"iyhTGFxv1QMD11hGy-data-head\"),\n",
       "          dataBody: document.getElementById(\"iyhTGFxv1QMD11hGy-data-body\"),\n",
       "          graphSelectionContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-graph-select-div\"),\n",
       "          graphSelection: document.getElementById(\"iyhTGFxv1QMD11hGy-graph-select\"),\n",
       "          nodeSizeDataSourceSelect: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-data-source-select\"),\n",
       "          nodeSizeNormalizationCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-normalization-checkbox\"),\n",
       "          nodeSizeNormalizationContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-norm-div\"),\n",
       "          nodeSizeNormalizationMinText: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-normalization-min-text\"),\n",
       "          nodeSizeNormalizationMinSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-normalization-min-slider\"),\n",
       "          nodeSizeNormalizationMaxText: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-normalization-max-text\"),\n",
       "          nodeSizeNormalizationMaxSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-normalization-max-slider\"),\n",
       "          edgeSizeDataSourceSelect: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-data-source-select\"),\n",
       "          edgeSizeNormalizationCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-normalization-checkbox\"),\n",
       "          edgeSizeNormalizationContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-norm-div\"),\n",
       "          edgeSizeNormalizationMinText: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-normalization-min-text\"),\n",
       "          edgeSizeNormalizationMinSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-normalization-min-slider\"),\n",
       "          edgeSizeNormalizationMaxText: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-normalization-max-text\"),\n",
       "          edgeSizeNormalizationMaxSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-normalization-max-slider\"),\n",
       "          // General\n",
       "          generalHead: document.getElementById(\"iyhTGFxv1QMD11hGy-general-head\"),\n",
       "          generalBody: document.getElementById(\"iyhTGFxv1QMD11hGy-general-body\"),\n",
       "          resetButton: document.getElementById(\"iyhTGFxv1QMD11hGy-reset\"),\n",
       "          fullscreenButton: document.getElementById(\"iyhTGFxv1QMD11hGy-fullscreen-button\"),\n",
       "          svgExportButton: document.getElementById(\"iyhTGFxv1QMD11hGy-svg\"),\n",
       "          pngExportButton: document.getElementById(\"iyhTGFxv1QMD11hGy-png\"),\n",
       "          jpgExportButton: document.getElementById(\"iyhTGFxv1QMD11hGy-jpg\"),\n",
       "          // Nodes\n",
       "          nodeHead: document.getElementById(\"iyhTGFxv1QMD11hGy-node-head\"),\n",
       "          nodeBody: document.getElementById(\"iyhTGFxv1QMD11hGy-node-body\"),\n",
       "          nodeCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-checkbox\"),\n",
       "          nodeSizeFactorText: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-factor-text\"),\n",
       "          nodeSizeFactorSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-node-size-factor-slider\"),\n",
       "          nodeDragFixCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-drag-fix-checkbox\"),\n",
       "          nodeHoverNeighborhoodCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-hover-neighborhood-checkbox\"),\n",
       "          nodeHoverTooltipCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-hover-tooltip-checkbox\"),\n",
       "          nodeReleaseButton: document.getElementById(\"iyhTGFxv1QMD11hGy-node-release-button\"),\n",
       "          // Node images\n",
       "          nodeImageHead: document.getElementById(\"iyhTGFxv1QMD11hGy-node-image-head\"),\n",
       "          nodeImageBody: document.getElementById(\"iyhTGFxv1QMD11hGy-node-image-body\"),\n",
       "          nodeImageCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-image-checkbox\"),\n",
       "          nodeImageMetaControl: document.getElementById(\"iyhTGFxv1QMD11hGy-node-image-meta-control\"),\n",
       "          nodeImageSizeFactorText: document.getElementById(\"iyhTGFxv1QMD11hGy-node-image-size-factor-text\"),\n",
       "          nodeImageSizeFactorSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-node-image-size-factor-slider\"),\n",
       "          // Node labels\n",
       "          nodeLabelHead: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-head\"),\n",
       "          nodeLabelBody: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-body\"),\n",
       "          nodeLabelCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-checkbox\"),\n",
       "          nodeLabelBorderCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-border-checkbox\"),\n",
       "          nodeLabelTextDataSourceSelect: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-data-source-select\"),\n",
       "          nodeLabelSizeFactorText: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-size-factor-text\"),\n",
       "          nodeLabelSizeFactorSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-size-factor-slider\"),\n",
       "          nodeLabelRotationText: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-rotation-text\"),\n",
       "          nodeLabelRotationSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-node-label-rotation-slider\"),\n",
       "          // Edges\n",
       "          edgeHead: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-head\"),\n",
       "          edgeBody: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-body\"),\n",
       "          edgeCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-checkbox\"),\n",
       "          edgeSizeFactorText: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-factor-text\"),\n",
       "          edgeSizeFactorSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-size-factor-slider\"),\n",
       "          edgeCurvatureText: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-curvature-text\"),\n",
       "          edgeCurvatureSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-curvature-slider\"),\n",
       "          edgeHoverTooltipCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-hover-tooltip-checkbox\"),\n",
       "          // Edge labels\n",
       "          edgeLabelHead: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-head\"),\n",
       "          edgeLabelBody: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-body\"),\n",
       "          edgeLabelCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-checkbox\"),\n",
       "          edgeLabelBorderCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-border-checkbox\"),\n",
       "          edgeLabelTextDataSourceSelect: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-data-source-select\"),\n",
       "          edgeLabelSizeFactorText: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-size-factor-text\"),\n",
       "          edgeLabelSizeFactorSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-size-factor-slider\"),\n",
       "          edgeLabelRotationText: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-rotation-text\"),\n",
       "          edgeLabelRotationSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-edge-label-rotation-slider\"),\n",
       "          // Layout algorithm\n",
       "          layoutAlgorithmHead: document.getElementById(\"iyhTGFxv1QMD11hGy-layout-algorithm-head\"),\n",
       "          layoutAlgorithmBody: document.getElementById(\"iyhTGFxv1QMD11hGy-layout-algorithm-body\"),\n",
       "          simulationCheckbox: document.getElementById(\"iyhTGFxv1QMD11hGy-simulation-active-checkbox\"),\n",
       "          layoutAlgorithmSelection: document.getElementById(\"iyhTGFxv1QMD11hGy-layout-algorithm-select\"),\n",
       "          centralGravitySlider: document.getElementById(\"iyhTGFxv1QMD11hGy-central-gravity-slider\"),\n",
       "          centralGravityText: document.getElementById(\"iyhTGFxv1QMD11hGy-central-gravity-text\"),\n",
       "          springLengthSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-spring-length-slider\"),\n",
       "          springLengthText: document.getElementById(\"iyhTGFxv1QMD11hGy-spring-length-text\"),\n",
       "          springConstantSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-spring-constant-slider\"),\n",
       "          springConstantText: document.getElementById(\"iyhTGFxv1QMD11hGy-spring-constant-text\"),\n",
       "          gravitationalConstantContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-gravitational-constant-div\"),\n",
       "          gravitationalConstantSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-gravitational-constant-slider\"),\n",
       "          gravitationalConstantText: document.getElementById(\"iyhTGFxv1QMD11hGy-gravitational-constant-text\"),\n",
       "          avoidOverlapContainer: document.getElementById(\"iyhTGFxv1QMD11hGy-avoid-overlap-div\"),\n",
       "          avoidOverlapSlider: document.getElementById(\"iyhTGFxv1QMD11hGy-avoid-overlap-slider\"),\n",
       "          avoidOverlapText: document.getElementById(\"iyhTGFxv1QMD11hGy-avoid-overlap-text\"),\n",
       "        },\n",
       "\n",
       "        composites:{\n",
       "          responsiveContainer:{\n",
       "            init(){\n",
       "              // Delete all contained items (relevant only for reset, not first creation)\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "              ui.deleteChildElements(ui.elements.detailsBody);\n",
       "              // Menu\n",
       "              if(state.showMenu){\n",
       "                ui.composites.menu.show();\n",
       "              } else{\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "              // Details\n",
       "              if(state.showDetails){\n",
       "                ui.composites.details.show(true);\n",
       "              } else{\n",
       "                ui.composites.details.hide(true);\n",
       "              }\n",
       "              // Divs\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "            },\n",
       "\n",
       "            getInnerWidths(){\n",
       "              state.graphContainerWidth = parseInt(ui.elements.graphContainer.clientWidth);\n",
       "              state.detailsContainerWidth = parseInt(ui.elements.detailsContainer.clientWidth);\n",
       "            },\n",
       "\n",
       "            getInnerHeights(){\n",
       "              state.graphContainerHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "              if(state.showDetails){\n",
       "                state.detailsContainerHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setInnerHeights(){\n",
       "              ui.elements.graphContainer.style.height = state.graphContainerHeight + \"px\";\n",
       "              ui.elements.detailsContainer.style.height = state.detailsContainerHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            setOuterHeights(){\n",
       "              ui.elements.mainContainer.style.height = ui.elements.leftContainer.offsetHeight + \"px\";\n",
       "            },\n",
       "\n",
       "            getSizes(){\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "            },\n",
       "\n",
       "            setSizes(){\n",
       "              ui.composites.responsiveContainer.setInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "            },\n",
       "\n",
       "            adaptToResize(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "\n",
       "            adaptToFullscreen(){\n",
       "              ui.composites.responsiveContainer.getSizes();\n",
       "              if(document.fullscreenElement){\n",
       "                // On entering fullscreen, remember the current container heights\n",
       "                state.beforeFullscreenGraphContainerHeight = state.graphContainerHeight;\n",
       "                state.beforeFullscreenDetailsContainerHeight = state.detailsContainerHeight;\n",
       "                // and then adapt them to maximum height possible in full screen mode\n",
       "                function calculateFullscreenMaxGraphHeight(){\n",
       "                  let outerHeight = null;\n",
       "                  try{\n",
       "                    const mainDivComputedStyle = window.getComputedStyle(ui.elements.mainContainer),\n",
       "                      graphDivComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                      paddingTop = parseFloat(mainDivComputedStyle.paddingTop),\n",
       "                      borderTop = parseFloat(graphDivComputedStyle.borderTopWidth),\n",
       "                      borderBottom = parseFloat(graphDivComputedStyle.borderBottomWidth),\n",
       "                      paddingBottom = parseFloat(mainDivComputedStyle.paddingBottom);\n",
       "                    outerHeight = paddingTop + borderTop + borderBottom + paddingBottom;\n",
       "                    if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                      throw \"Invalid number\";\n",
       "                    }\n",
       "                  } catch(e){\n",
       "                    // Hard coded fallback, depends on CSS of containers (1px borders, 6px padding)\n",
       "                    outerHeight = 1 + 3 + 3 + 1;\n",
       "                  }\n",
       "                  let graphHeight = screen.height - outerHeight;\n",
       "                  if(state.showDetails){\n",
       "                    graphHeight -= ui.composites.details.calculateHeightDifference();\n",
       "                  }\n",
       "                  return graphHeight;\n",
       "                }\n",
       "                state.graphContainerHeight = calculateFullscreenMaxGraphHeight();\n",
       "              } else{\n",
       "                // On leaving fullscreen, set container heights back to remembered values\n",
       "                state.graphContainerHeight = state.beforeFullscreenGraphContainerHeight;\n",
       "                state.detailsContainerHeight = state.beforeFullscreenDetailsContainerHeight;\n",
       "              }\n",
       "              ui.composites.responsiveContainer.setSizes();\n",
       "            },\n",
       "          },\n",
       "\n",
       "          menu:{\n",
       "            show(){\n",
       "              ui.elements.leftContainer.style.width = \"80%\";\n",
       "              ui.elements.rightContainer.style.width = \"20%\";\n",
       "              ui.elements.rightContainer.style.display = \"block\";\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.leftContainer.style.width = \"100%\";\n",
       "              ui.elements.rightContainer.style.width = \"0%\";\n",
       "              ui.elements.rightContainer.style.display = \"none\";\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update menu button\n",
       "              const div = ui.elements.menuToggleDiv;\n",
       "              state.showMenu = !state.showMenu;\n",
       "              if(state.showMenu){\n",
       "                div.innerText = ui.symbols.menuShown;\n",
       "                ui.composites.menu.show();\n",
       "              } else {\n",
       "                div.innerHTML = ui.symbols.menuHidden;\n",
       "                ui.composites.menu.hide();\n",
       "              }\n",
       "\n",
       "              // Update rest of UI\n",
       "              ui.composites.responsiveContainer.getInnerWidths();\n",
       "              ui.composites.responsiveContainer.getInnerHeights();\n",
       "              ui.composites.responsiveContainer.setOuterHeights();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            },\n",
       "\n",
       "            setItem(keyElement, valElement, toActive){\n",
       "              const currentText = keyElement.innerHTML;\n",
       "              let sliceStart = 0;\n",
       "              if(currentText.startsWith(ui.symbols.menuItemActive)){\n",
       "                sliceStart = ui.symbols.menuItemActive.length;\n",
       "              } else if (currentText.startsWith(ui.symbols.menuItemInactive)){\n",
       "                sliceStart = ui.symbols.menuItemInactive.length;\n",
       "              }\n",
       "              if(toActive){\n",
       "                keyElement.innerHTML = ui.symbols.menuItemActive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"#f5f5f5\";\n",
       "                keyElement.style.color = \"black\";\n",
       "                keyElement.style.borderColor = \"#999\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.35)\";\n",
       "                valElement.style.display = \"block\";\n",
       "              } else {\n",
       "                keyElement.innerHTML = ui.symbols.menuItemInactive + currentText.slice(sliceStart);\n",
       "                keyElement.style.backgroundColor = \"white\";\n",
       "                keyElement.style.color = \"#222\";\n",
       "                keyElement.style.borderColor = \"#ccc\";\n",
       "                keyElement.style.boxShadow = \"0px 0px 3px rgba(0, 0, 0, 0.2)\";\n",
       "                valElement.style.display = \"none\";\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggleItem(keyElement, valElement){\n",
       "              const toActive = !(valElement.style.display !== \"none\");\n",
       "              ui.composites.menu.setItem(keyElement, valElement, toActive);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          details:{\n",
       "            calculateHeightDifference(){\n",
       "              let outerHeight = null;\n",
       "              try{\n",
       "                const graphContainerComputedStyle = window.getComputedStyle(ui.elements.graphContainer),\n",
       "                  detailsContainerComputedStyle = window.getComputedStyle(ui.elements.detailsContainer),\n",
       "                  border1 = parseFloat(graphContainerComputedStyle.borderBottomWidth),\n",
       "                  margin = parseFloat(detailsContainerComputedStyle.marginTop),\n",
       "                  border2 = parseFloat(detailsContainerComputedStyle.borderTopWidth);\n",
       "                outerHeight = border1 + margin + border2;\n",
       "                if(!isFinite(outerHeight) || outerHeight === null){\n",
       "                  throw \"Invalid number\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                // Hard coded fallback, depends on CSS of containers (1px borders, 5px margin)\n",
       "                outerHeight = 7.0;\n",
       "              }\n",
       "              return state.detailsContainerHeight + outerHeight\n",
       "            },\n",
       "\n",
       "            show(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"block\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight -= heightDiff;\n",
       "                if(state.graphContainerHeight < 70){\n",
       "                  state.graphContainerHeight = 70;\n",
       "                }\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            hide(init=false){\n",
       "              // Visibility\n",
       "              ui.elements.detailsContainer.style.display = \"none\";\n",
       "              if(!init){\n",
       "                // Height\n",
       "                const heightDiff = ui.composites.details.calculateHeightDifference();\n",
       "                state.graphContainerHeight += heightDiff;\n",
       "                // Update rest of UI\n",
       "                ui.composites.responsiveContainer.setSizes();\n",
       "                ui.composites.graph.updateGraphDrawingArea();\n",
       "              }\n",
       "            },\n",
       "\n",
       "            toggle(){\n",
       "              // Update details button\n",
       "              const toggleDiv = ui.elements.detailsToggleDiv;\n",
       "              state.showDetails = !state.showDetails;\n",
       "              if(state.showDetails){\n",
       "                toggleDiv.innerText = ui.symbols.detailsShown;\n",
       "                ui.composites.details.show();\n",
       "              } else {\n",
       "                toggleDiv.innerHTML = ui.symbols.detailsHidden;\n",
       "                ui.composites.details.hide();\n",
       "              }\n",
       "            },\n",
       "          },\n",
       "\n",
       "          download:{\n",
       "            png(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"png\");\n",
       "            },\n",
       "\n",
       "            jpg(filename){\n",
       "              ui.composites.download._rasterImage(filename, \"jpeg\");\n",
       "            },\n",
       "\n",
       "            _rasterImage(filename, format){\n",
       "              const canvas = ui.elements.graphContainer.getElementsByTagName(\"canvas\")[0],\n",
       "                mimeType = \"image/\" + format;\n",
       "              function finishedBlobCallback(blob){\n",
       "                ui.composites.download._blobToFileDownload(blob, filename);\n",
       "              }\n",
       "              try{\n",
       "                // Blob to overcome size limitations for data URLs (e.g. 4MB in Chrome)\n",
       "                canvas.toBlob(finishedBlobCallback, mimeType, 1.0);\n",
       "              } catch(e){\n",
       "                if(e.name === \"SecurityError\"){\n",
       "                  alert(\"Image creation failed. Some images within the nodes of the graph can \" +\n",
       "                      \"not be fetched from within JavaScript due to security settings of the \" +\n",
       "                      \"server that provides the images.\");\n",
       "                } else{\n",
       "                  throw e;\n",
       "                }\n",
       "              }\n",
       "            },\n",
       "\n",
       "            _blobToFileDownload(blob, filename){\n",
       "              const url = URL.createObjectURL(blob),\n",
       "                a = document.createElement(\"a\");\n",
       "              function handleClick(){\n",
       "                setTimeout(function(){\n",
       "                  // Long waiting time before removal for slow devices like mobile phones\n",
       "                  URL.revokeObjectURL(url);\n",
       "                  this.removeEventListener(\"click\", handleClick);\n",
       "                }, 20000);\n",
       "              };\n",
       "              document.body.appendChild(a);\n",
       "              a.href = url;\n",
       "              a.download = filename;\n",
       "              a.addEventListener(\"click\", handleClick, false);\n",
       "              a.click();\n",
       "              document.body.removeChild(a);\n",
       "            },\n",
       "          },\n",
       "\n",
       "          selection(element, optionList, valueList=undefined) {\n",
       "            while(element.hasChildNodes()){\n",
       "              element.removeChild(element.firstChild);\n",
       "            }\n",
       "            for(let i=0; i<optionList.length; i++){\n",
       "              let text = optionList[i];\n",
       "              let value = text;\n",
       "              if(valueList){\n",
       "                value = valueList[i];\n",
       "              }\n",
       "              let opt = document.createElement(\"option\");\n",
       "              opt.appendChild(document.createTextNode(text));\n",
       "              opt.value = value;\n",
       "              element.appendChild(opt);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          tooltip:{\n",
       "            show(xShift=null, yShift=null){\n",
       "              if(isFinite(xShift) && xShift !== null){\n",
       "                ui.elements.tooltipContainer.style.left =  parseInt(xShift) + \"px\";\n",
       "              }\n",
       "              if(isFinite(yShift) && yShift !== null){\n",
       "                ui.elements.tooltipContainer.style.top = parseInt(yShift) + \"px\";\n",
       "              }\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0s, opacity 0.1s\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"visible\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 1.0;\n",
       "            },\n",
       "\n",
       "            hide(){\n",
       "              ui.elements.tooltipContainer.style.transition = \"visibility 0.3s, opacity 0.3s ease-in\";\n",
       "              ui.elements.tooltipContainer.style.visibility = \"hidden\";\n",
       "              ui.elements.tooltipContainer.style.opacity = 0.0;\n",
       "            },\n",
       "          },\n",
       "\n",
       "          progressBar:{\n",
       "            create(){\n",
       "              // Main container\n",
       "              this.mainContainer = document.createElement(\"div\");\n",
       "              this.mainContainer.id = \"iyhTGFxv1QMD11hGy-progress-container\";\n",
       "              this.mainContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              ui.elements.graphContainer.style.backgroundColor = state.shownData.general.background_color;\n",
       "              // Text container\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              this.textContainer = document.createElement(\"div\");\n",
       "              this.textContainer.innerText = \"Large graph with \" + numNodes + \" nodes. Calculating an initial layout before visualizing it.\";\n",
       "              this.textContainer.style.textAlign = \"center\";\n",
       "              // Bar container\n",
       "              this.outerBarContainer = document.createElement(\"div\");\n",
       "              this.outerBarContainer.style.border = \"1px solid black\";\n",
       "              this.outerBarContainer.style.borderRadius = \"4px\";\n",
       "              this.outerBarContainer.style.marginTop = \"1ex\";\n",
       "              this.outerBarContainer.style.padding = \"1px\";\n",
       "              this.innerBarContainer = document.createElement(\"div\");\n",
       "              this.innerBarContainer.style.backgroundColor = \"black\";\n",
       "              this.innerBarContainer.style.width = \"0%\";\n",
       "              this.innerBarContainer.style.height = \"8px\";\n",
       "              this.innerBarContainer.style.borderRadius = \"3px\";\n",
       "              // Add them to DOM\n",
       "              this.outerBarContainer.appendChild(this.innerBarContainer);\n",
       "              this.mainContainer.appendChild(this.textContainer);\n",
       "              this.mainContainer.appendChild(this.outerBarContainer);\n",
       "              ui.elements.graphContainer.appendChild(this.mainContainer);\n",
       "            },\n",
       "\n",
       "            update(percentage){\n",
       "              this.innerBarContainer.style.width = percentage + \"%\";\n",
       "            },\n",
       "\n",
       "            remove(){\n",
       "              ui.elements.graphContainer.removeChild(this.mainContainer);\n",
       "            }\n",
       "          },\n",
       "\n",
       "          graph:{\n",
       "            createGraph(){\n",
       "              // Remove existing elements\n",
       "              ui.deleteChildElements(ui.elements.graphContainer);\n",
       "\n",
       "              // Create new elements\n",
       "              // I) Set graph options\n",
       "              // a) Nodes: https://visjs.github.io/vis-network/docs/network/nodes.html\n",
       "              const data = state.shownData,\n",
       "                visNodes = [];\n",
       "              let graphContainsFixedPositions = false;\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                let visNode = {\n",
       "                  id: node.id,\n",
       "                  shape: node.shape,\n",
       "                  borderWidth: node.border_size,\n",
       "                  color: {\n",
       "                    background: node.color,\n",
       "                    border: node.border_color,\n",
       "                  },\n",
       "                }\n",
       "                // - Node labels\n",
       "                if(state.showNodeLabels){\n",
       "                  if(typeof(node.label) !== \"undefined\"){\n",
       "                    visNode.label = node.label;\n",
       "                    visNode.font = {\n",
       "                      size: node.label_size,\n",
       "                      color: node.label_color,\n",
       "                      strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Nodes hidden/shown (\"hidden\" property hides entire graph, using size=0 instead)\n",
       "                if(state.showNodes || (typeof(node.image) !== \"undefined\" && state.showNodeImages)){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // - Node images\n",
       "                if(typeof(node.image) !== \"undefined\"){\n",
       "                  if(state.showNodeImages){\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                    visNode.size = node.image_size;\n",
       "                    // prevent a visual change of nodes with images upon selection (not deactivatable)\n",
       "                    visNode.color.highlight = {\n",
       "                      background: visNode.color.background,\n",
       "                      border: visNode.color.border,\n",
       "                    };\n",
       "                    visNode.borderWidthSelected = visNode.borderWidth;\n",
       "                  }\n",
       "                }\n",
       "                // - Node positions\n",
       "                const x = node.fx,\n",
       "                  y = node.fy;\n",
       "                if((typeof(x) !== \"undefined\") || (typeof(y) !== \"undefined\")){\n",
       "                  graphContainsFixedPositions = true;\n",
       "                  visNode.fixed = {}\n",
       "                  if(typeof(x) !== \"undefined\"){\n",
       "                    visNode.x = x;\n",
       "                    visNode.fixed.x = true;\n",
       "                  }\n",
       "                  if(typeof(y) !== \"undefined\"){\n",
       "                    visNode.y = y;\n",
       "                    visNode.fixed.y = true;\n",
       "                  }\n",
       "                }\n",
       "                // - Node hover behavior 1: highlight neighborhood\n",
       "                visNode.color.hover = {\n",
       "                  background: visNode.color.background,\n",
       "                  border: visNode.color.background,\n",
       "                };\n",
       "                // - Node hover behavior 2: show tooltip\n",
       "                if(state.nodeHoverTooltip){\n",
       "                  if(typeof(node.hover) !== \"undefined\"){\n",
       "                    visNode.title = node.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Node click behavior: show details\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  visNode.click = node.click;\n",
       "                }\n",
       "                visNodes.push(visNode);\n",
       "              }\n",
       "\n",
       "              // b) Edges: https://visjs.github.io/vis-network/docs/network/edges.html\n",
       "              const visEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i];\n",
       "                const visEdge = {\n",
       "                  id: edge.id,\n",
       "                  from: edge.source.id,\n",
       "                  to: edge.target.id,\n",
       "                  color: edge.color,\n",
       "                  width: edge.size,\n",
       "                };\n",
       "                // - Edge labels\n",
       "                if(state.showEdgeLabels){\n",
       "                  if(typeof(edge.label) !== \"undefined\"){\n",
       "                    visEdge.label = edge.label;\n",
       "                    visEdge.font = {\n",
       "                      size: edge.label_size,\n",
       "                      color: edge.label_color,\n",
       "                      strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                      strokeColor: data.general.background_color,\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                // - Edges hidden/shown\n",
       "                if(!state.showEdges){\n",
       "                  visEdge.hidden = true;\n",
       "                }\n",
       "                // - Edge hover behavior\n",
       "                if(state.edgeHoverTooltip){\n",
       "                  if(typeof(edge.hover) !== \"undefined\") {\n",
       "                    visEdge.title = edge.hover;\n",
       "                  }\n",
       "                }\n",
       "                // - Edge click behavior\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  visEdge.click = edge.click;\n",
       "                }\n",
       "                visEdges.push(visEdge);\n",
       "              }\n",
       "              // c) Options: https://visjs.github.io/vis-network/docs/network/\n",
       "              const options = {};\n",
       "              // - Nodes\n",
       "              options.nodes = {};\n",
       "              options.nodes.chosen = false;\n",
       "              options.nodes.imagePadding = 1.5;\n",
       "              options.nodes.labelHighlightBold = false;\n",
       "              options.nodes.shapeProperties = {};\n",
       "              options.nodes.shapeProperties.useBorderWithImage = true;\n",
       "              // - Node label font family\n",
       "              if(state.nodeLabelFont !== null){\n",
       "                options.nodes.font = {\n",
       "                  \"face\": state.nodeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Edges\n",
       "              options.edges = {};\n",
       "              // - Edges hidden/shown\n",
       "              if(!state.showEdges){\n",
       "                options.edges.hidden = true;\n",
       "              }\n",
       "              // - Edge curvature\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                options.edges.smooth = false;\n",
       "              } else {\n",
       "                options.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              // - Edge arrows\n",
       "              if(data.general.directed){\n",
       "                options.edges.arrows = {};\n",
       "                options.edges.arrows.to = {};\n",
       "                options.edges.arrows.to.enabled = true;\n",
       "                if(data.general.arrow_size !== 0.0){\n",
       "                  options.edges.arrows.to.scaleFactor = data.general.arrow_size / 10.0;\n",
       "                }\n",
       "              }\n",
       "              // - Edge label font family\n",
       "              if(state.edgeLabelFont !== null){\n",
       "                options.edges.font = {\n",
       "                  \"face\": state.edgeLabelFont,\n",
       "                }\n",
       "              }\n",
       "              // - Drawing area\n",
       "              options.autoResize = false;\n",
       "              // - Interaction\n",
       "              options.interaction = {};\n",
       "              options.interaction.selectable = false;\n",
       "              options.interaction.selectConnectedEdges = false;\n",
       "              options.interaction.tooltipDelay = 0.0;\n",
       "              options.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              options.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              // - Layout algorithm\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              options.layout = {};\n",
       "              if(numNodes < 400){\n",
       "                options.layout.improvedLayout = true;\n",
       "              } else{\n",
       "                options.layout.improvedLayout = false;\n",
       "              }\n",
       "              options.physics = {};\n",
       "              options.physics.barnesHut = {\"damping\": 0.25};\n",
       "              options.physics.forceAtlas2Based = {\"damping\": 3.0};\n",
       "              options.physics.repulsion = {};\n",
       "              options.physics.hierarchicalRepulsion = {};\n",
       "              options.physics.stabilization = {};\n",
       "              options.physics.stabilization.enabled = false;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                let numIterations = 800;\n",
       "                if(numNodes >= 25000){\n",
       "                  numIterations = 100;\n",
       "                } else if(numNodes >= 10000){\n",
       "                  numIterations = 300;\n",
       "                } else if(numNodes >= 5000){\n",
       "                  numIterations = 400;\n",
       "                } else if(numNodes >= 2000){\n",
       "                  numIterations = 500;\n",
       "                } else if(numNodes >= 1000){\n",
       "                  numIterations = 600;\n",
       "                }\n",
       "                options.physics.stabilization = {\n",
       "                  \"enabled\": true,\n",
       "                  \"fit\": true,\n",
       "                  \"iterations\": numIterations,\n",
       "                  \"updateInterval\": 1,\n",
       "                };\n",
       "              }\n",
       "              // II) Create graph\n",
       "              // - DataSet and Network: https://visjs.github.io/vis-network/docs/network\n",
       "              state.visOptions = options;\n",
       "              state.visData = {\n",
       "                nodes: new vis.DataSet(visNodes),\n",
       "                edges: new vis.DataSet(visEdges),\n",
       "              };\n",
       "              state.visGraph = new vis.Network(ui.elements.graphContainer, state.visData, state.visOptions);\n",
       "              // III) Set further graph options after its creation\n",
       "              // - Background: https://github.com/almende/vis/issues/2292\n",
       "              state.visGraph.on(\"beforeDrawing\", function(ctx){\n",
       "                  ctx.save();\n",
       "                  ctx.setTransform(1, 0, 0, 1, 0, 0);\n",
       "                  ctx.fillStyle = data.general.background_color;\n",
       "                  ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n",
       "                  ctx.restore();\n",
       "              })\n",
       "              // - Node positions: node update after graph creation seems to prevent a bug\n",
       "              if(graphContainsFixedPositions){\n",
       "                state.visData.nodes.update(visNodes);\n",
       "              }\n",
       "              // - Graph behavior\n",
       "              ui.composites.graph.setBehavior();\n",
       "\n",
       "              // Menu toggle button\n",
       "              if(state.showMenuToggleButton){\n",
       "                const menuDiv = document.createElement(\"div\");\n",
       "                if(state.showMenu){\n",
       "                  menuDiv.innerText = ui.symbols.menuShown;\n",
       "                } else {\n",
       "                  menuDiv.innerText = ui.symbols.menuHidden;\n",
       "                }\n",
       "                menuDiv.id = \"iyhTGFxv1QMD11hGy-menu-toggle-button\";\n",
       "                menuDiv.onclick = ui.composites.menu.toggle;\n",
       "                ui.elements.graphContainer.appendChild(menuDiv);\n",
       "                ui.elements.menuToggleDiv = menuDiv;\n",
       "              }\n",
       "              // Details toggle button\n",
       "              if(state.showDetailsToggleButton){\n",
       "                const detailsDiv = document.createElement(\"div\");\n",
       "                if(state.showDetails){\n",
       "                  detailsDiv.innerText = ui.symbols.detailsShown;\n",
       "                } else {\n",
       "                  detailsDiv.innerText = ui.symbols.detailsHidden;\n",
       "                }\n",
       "                detailsDiv.id = \"iyhTGFxv1QMD11hGy-details-toggle-button\";\n",
       "                detailsDiv.onclick = ui.composites.details.toggle;\n",
       "                ui.elements.graphContainer.appendChild(detailsDiv);\n",
       "                ui.elements.detailsToggleDiv = detailsDiv;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            setBehavior(){\n",
       "              // - Progress bar: only if large graph, stops simulation to get initial static image\n",
       "              // https://visjs.github.io/vis-network/examples/network/exampleApplications/loadingBar.html\n",
       "              const numNodes = state.parsedData.nodes.length;\n",
       "              if(numNodes > state.largeGraphThreshold){\n",
       "                // Layout start\n",
       "                ui.composites.progressBar.create();\n",
       "                // Layout update\n",
       "                state.visGraph.on(\"stabilizationProgress\", function(params){\n",
       "                  var progressPercentage = params.iterations / params.total * 100;\n",
       "                  ui.composites.progressBar.update(progressPercentage);\n",
       "                });\n",
       "                // Layout finished\n",
       "                state.visGraph.once(\"stabilizationIterationsDone\", function(){\n",
       "                  setTimeout(function(){\n",
       "                    ui.composites.progressBar.remove();\n",
       "                    ui.composites.graph.simulationManager.stop();\n",
       "                  }, 60);\n",
       "                });\n",
       "              }\n",
       "              // - Node drag behavior: move node, fix its position or release it afterwards\n",
       "              state.visGraph.on(\"dragStart\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const visNode = state.visData.nodes.get(nodeId),\n",
       "                    position = state.visGraph.getPositions(nodeId);\n",
       "                  visNode.x = position.x;\n",
       "                  visNode.y = position.y;\n",
       "                  visNode.fixed = false;\n",
       "                  state.visData.nodes.update(visNode);\n",
       "                }\n",
       "              });\n",
       "              state.visGraph.on(\"dragEnd\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  if(state.nodeDragFix){\n",
       "                    const visNode = state.visData.nodes.get(nodeId),\n",
       "                      position = state.visGraph.getPositions(nodeId);\n",
       "                    visNode.x = position.x;\n",
       "                    visNode.y = position.y;\n",
       "                    visNode.fixed = {\"x\": true, \"y\": true}\n",
       "                    state.visData.nodes.update(visNode);\n",
       "                  }\n",
       "                }\n",
       "              });\n",
       "              // - Node and edge hover behavior: already covered\n",
       "              // - Node and edge click behavior\n",
       "              // https://visjs.github.io/vis-network/examples/network/events/interactionEvents.html\n",
       "              function createNodeText(node){\n",
       "                let htmlText = \"<div>Node: \" + String(node.id) + \"</div>\";\n",
       "                if(typeof(node.click) !== \"undefined\" && node.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iyhTGFxv1QMD11hGy-details-user-provided\">' + node.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              function createEdgeText(edge){\n",
       "                let htmlText = \"<div>Edge: \" + String(edge.id) + \"</div>\";\n",
       "                if(typeof(edge.click) !== \"undefined\" && edge.click !== \"\"){\n",
       "                  htmlText += '<div id=\"iyhTGFxv1QMD11hGy-details-user-provided\">' + edge.click + '</div>';\n",
       "                }\n",
       "                return htmlText;\n",
       "              }\n",
       "              state.visGraph.on(\"click\", function(params){\n",
       "                params.event = \"[original event]\";\n",
       "                let htmlText = \"\";\n",
       "                const nodeId = this.getNodeAt(params.pointer.DOM);\n",
       "                if(nodeId){\n",
       "                  const node = state.visData.nodes.get(nodeId);\n",
       "                  if(node){\n",
       "                    htmlText = createNodeText(node);\n",
       "                  }\n",
       "                } else {\n",
       "                  const edgeId = this.getEdgeAt(params.pointer.DOM);\n",
       "                  if(edgeId){\n",
       "                    const edge = state.visData.edges.get(edgeId);\n",
       "                    if(edge){\n",
       "                      htmlText = createEdgeText(edge);\n",
       "                    }\n",
       "                  }\n",
       "                }\n",
       "                ui.elements.detailsBody.innerHTML = htmlText;\n",
       "              });\n",
       "              // - Simulation behavior\n",
       "              state.visGraph.on(\"startStabilizing\", function(params){\n",
       "                // A manually stopped simulation restarts automatically by dragging a node or\n",
       "                // altering a dataset, immediately triggering this event. So if the simulation\n",
       "                // shall be inactive, any automatic restart can be turned off immediately here.\n",
       "                if(!state.layoutAlgorithmActive){\n",
       "                  state.visGraph.stopSimulation();\n",
       "                }\n",
       "              });\n",
       "              // Start (considers all simulation parameters)\n",
       "              ui.composites.graph.simulationManager.start();\n",
       "            },\n",
       "\n",
       "            // Graph\n",
       "            updateGraphDrawingArea(){\n",
       "              state.visGraph.setSize(state.graphContainerWidth, state.graphContainerHeight);\n",
       "              state.visGraph.redraw();\n",
       "            },\n",
       "\n",
       "            // Nodes\n",
       "            updateNodes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                // Node shape\n",
       "                visNode.shape = node.shape;\n",
       "                // Node size\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                // Node images\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                // Prevent node movements: Remove stored positions of nodes once fixed and now released\n",
       "                if(visNode.fixed === false){\n",
       "                  delete visNode.x;\n",
       "                  delete visNode.y;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            preventNodeJump(visNode){\n",
       "              if(visNode.fixed === false){\n",
       "                delete visNode.x;\n",
       "                delete visNode.y;\n",
       "              }\n",
       "            },\n",
       "\n",
       "            updateNodeVisibilities(){\n",
       "              ui.composites.graph.updateNodes();\n",
       "            },\n",
       "\n",
       "            updateNodeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.size = node.size;\n",
       "                if(state.showNodeImages && typeof(node.image) !== \"undefined\"){\n",
       "                  visNode.size = node.image_size;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverNeighborhoodBehavior(){\n",
       "              state.visOptions.interaction.hover = state.nodeHoverNeighborhood;\n",
       "              state.visOptions.interaction.hoverConnectedEdges = state.nodeHoverNeighborhood;\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateNodeHoverTooltipBehavior(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                if(typeof(node.hover) !== \"undefined\"){\n",
       "                  visNode.title = state.nodeHoverTooltip ? node.hover : null;\n",
       "                }\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node images\n",
       "            updateNodeImages(){\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i],\n",
       "                  visNode = state.visData.nodes.get(node.id);\n",
       "                visNode.shape = node.shape;\n",
       "                if(state.showNodes){\n",
       "                  visNode.size = node.size;\n",
       "                } else {\n",
       "                  visNode.size = 0.0;\n",
       "                }\n",
       "                if(state.showNodeImages){\n",
       "                  if(typeof(node.image) !== \"undefined\"){\n",
       "                    visNode.size = node.image_size;\n",
       "                    visNode.shape = \"image\";\n",
       "                    visNode.image = node.image;\n",
       "                  }\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Node labels\n",
       "            updateNodeLabels(){\n",
       "              // Vis data sets: https://visjs.github.io/vis-data/data/dataset.html\n",
       "              const data = state.shownData,\n",
       "                newVisNodes = [];\n",
       "              for(let i=0; i<data.nodes.length; i++){\n",
       "                const node = data.nodes[i];\n",
       "                const visNode = state.visData.nodes.get(node.id);\n",
       "                if(state.showNodeLabels){\n",
       "                  visNode.label = node.label;\n",
       "                  visNode.font = {\n",
       "                    size: node.label_size,\n",
       "                    color: node.label_color,\n",
       "                    strokeWidth: (state.showNodeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else{\n",
       "                  visNode.label = undefined;\n",
       "                }\n",
       "                ui.composites.graph.preventNodeJump(visNode);\n",
       "                newVisNodes.push(visNode);\n",
       "              }\n",
       "              state.visData.nodes.update(newVisNodes);\n",
       "            },\n",
       "\n",
       "            // Edges\n",
       "            calculateEdgeCurvatureOptions(){\n",
       "              const appearanceAdaptionFactor = 0.5,\n",
       "                options = {\n",
       "                \"type\": state.edgeCurvature > 0.0 ? \"curvedCW\" : \"curvedCCW\",\n",
       "                \"roundness\": Math.abs(state.edgeCurvature) * appearanceAdaptionFactor,\n",
       "              };\n",
       "              return options\n",
       "            },\n",
       "\n",
       "            updateEdgeVisibility(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                visEdge.hidden = !state.showEdges;\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeSizes(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for (let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  newVisEdge = state.visData.edges.get(edge.id);\n",
       "                newVisEdge.width = edge.size;\n",
       "                newVisEdges.push(newVisEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            updateEdgeCurvatures(){\n",
       "              if(state.edgeCurvature === 0.0){\n",
       "                state.visOptions.edges.smooth = false;\n",
       "              } else {\n",
       "                state.visOptions.edges.smooth = ui.composites.graph.calculateEdgeCurvatureOptions();\n",
       "              }\n",
       "              state.visGraph.setOptions(state.visOptions);\n",
       "            },\n",
       "\n",
       "            updateEdgeHoverTooltipBehavior(){\n",
       "              /* Correct code, but there is a bug that renders null values as empty div (instead of ignoring them)\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  visEdge.title = state.edgeHoverTooltip ? edge.hover : null;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "              */\n",
       "              // Workaround code\n",
       "              function cloneObject(obj){\n",
       "                return Object.assign({}, obj);\n",
       "              }\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [];\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(typeof(edge.hover) !== \"undefined\"){\n",
       "                  if(state.edgeHoverTooltip){\n",
       "                    visEdge.title = edge.hover;\n",
       "                    newVisEdges.push(visEdge);\n",
       "                  } else{\n",
       "                    // edges.update can only add properties, not delete them, hence use of clone/remove/add\n",
       "                    clonedEdge = cloneObject(visEdge);\n",
       "                    delete clonedEdge.title;\n",
       "                    state.visData.edges.remove(edge.id);\n",
       "                    state.visData.edges.add(clonedEdge);\n",
       "                  }\n",
       "                }\n",
       "              }\n",
       "              if(state.edgeHoverTooltip){\n",
       "                state.visData.edges.update(newVisEdges);\n",
       "              }\n",
       "            },\n",
       "\n",
       "            // Edge labels\n",
       "            updateEdgeLabels(){\n",
       "              const data = state.shownData,\n",
       "                newVisEdges = [],\n",
       "                noLabel = \" \";  // undefined, null, \"\" or deleting label property does not work\n",
       "              for(let i=0; i<data.edges.length; i++){\n",
       "                const edge = data.edges[i],\n",
       "                  visEdge = state.visData.edges.get(edge.id);\n",
       "                if(state.showEdgeLabels){\n",
       "                  visEdge.label = edge.label;\n",
       "                  visEdge.font = {\n",
       "                    size: edge.label_size,\n",
       "                    color: edge.label_color,\n",
       "                    strokeWidth: (state.showEdgeLabelBorders ? 1.2 : 0.0),\n",
       "                    strokeColor: data.general.background_color,\n",
       "                  }\n",
       "                } else {\n",
       "                  visEdge.label = noLabel;\n",
       "                }\n",
       "                newVisEdges.push(visEdge);\n",
       "              }\n",
       "              state.visData.edges.update(newVisEdges);\n",
       "            },\n",
       "\n",
       "            // Layout algorithm\n",
       "            simulationManager:{\n",
       "              start(){\n",
       "                state.visGraph.startSimulation();\n",
       "                this.setAlgorithm();\n",
       "                this.setSpringLength();\n",
       "                this.setSpringConstant();\n",
       "                this.setCentralGravity();\n",
       "                this.setGravitationalConstant();\n",
       "                this.setAvoidOverlap();\n",
       "              },\n",
       "              stop(){\n",
       "                state.visGraph.stopSimulation();\n",
       "              },\n",
       "              setActivity(on){\n",
       "                if(on){\n",
       "                  this.start();\n",
       "                } else{\n",
       "                  this.stop();\n",
       "                }\n",
       "              },\n",
       "              setAlgorithm(){\n",
       "                const name = state.layoutAlgorithm;\n",
       "                state.visOptions.physics.solver = name;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "                if(name === \"repulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else if(name === \"hierarchicalRepulsion\"){\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(false);\n",
       "                } else {\n",
       "                  ui.elements.avoidOverlapContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                  ui.elements.gravitationalConstantContainer.style.opacity = ui.convert.boolToOpacity(true);\n",
       "                }\n",
       "              },\n",
       "              releaseFixedNodes(){\n",
       "                const data = state.shownData,\n",
       "                  newVisNodes = [];\n",
       "                for(let i=0; i<data.nodes.length; i++){\n",
       "                  const node = data.nodes[i],\n",
       "                    visNode = state.visData.nodes.get(node.id);\n",
       "                  ui.composites.graph.preventNodeJump(visNode);\n",
       "                  visNode.fixed = false;\n",
       "                  // Note: Deletion of x, y and fixed may work too, but .update does not delete props\n",
       "                  newVisNodes.push(visNode);\n",
       "                }\n",
       "                state.visData.nodes.update(newVisNodes);\n",
       "              },\n",
       "              setSpringLength(){\n",
       "                state.visOptions.physics.barnesHut.springLength = state.springLength;\n",
       "                state.visOptions.physics.forceAtlas2Based.springLength = state.springLength;\n",
       "                state.visOptions.physics.repulsion.springLength = state.springLength;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springLength = state.springLength;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setSpringConstant(){\n",
       "                state.visOptions.physics.barnesHut.springConstant = state.springConstant / 10.0;\n",
       "                state.visOptions.physics.forceAtlas2Based.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.repulsion.springConstant = state.springConstant;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.springConstant = state.springConstant;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setCentralGravity(){\n",
       "                state.visOptions.physics.barnesHut.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.forceAtlas2Based.centralGravity = state.centralGravity / 100.0;\n",
       "                state.visOptions.physics.repulsion.centralGravity = state.centralGravity;\n",
       "                state.visOptions.physics.hierarchicalRepulsion.centralGravity = state.centralGravity;\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setGravitationalConstant(){\n",
       "                state.visOptions.physics.barnesHut.gravitationalConstant = state.gravitationalConstant;\n",
       "                state.visOptions.physics.forceAtlas2Based.gravitationalConstant = state.gravitationalConstant / 10.0;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "              setAvoidOverlap(){\n",
       "                state.visOptions.physics.barnesHut.avoidOverlap = state.avoidOverlap;\n",
       "                state.visOptions.physics.forceAtlas2Based.avoidOverlap = state.avoidOverlap;\n",
       "                // Not a parameter in repulsion and hierarchicalRepulsion\n",
       "                state.visGraph.setOptions(state.visOptions);\n",
       "              },\n",
       "            }\n",
       "          },\n",
       "        },\n",
       "\n",
       "        init(){\n",
       "          // Containers\n",
       "          ui.composites.responsiveContainer.init();\n",
       "          // Graph selection (only visible if multiple graphs in data)\n",
       "          if(state.rawData.length > 1){\n",
       "            ui.elements.graphSelectionContainer.style.display = ui.convert.boolToDisplayStyle(true);\n",
       "            const optionList = [],\n",
       "              valueList = [];\n",
       "            let label;\n",
       "            for(let i=0; i<state.rawData.length; i++){\n",
       "              const graph = state.rawData[i];\n",
       "              try{\n",
       "                label = String(graph.label);\n",
       "                if(label === \"undefined\" || label === \"\"){\n",
       "                  throw \"Invalid label\";\n",
       "                }\n",
       "              } catch(e){\n",
       "                label = \"Unnamed graph\";\n",
       "              }\n",
       "              const name = String(i+1) + \": \" + label;\n",
       "              optionList.push(name);\n",
       "              valueList.push(String(i));\n",
       "            }\n",
       "            ui.composites.selection(ui.elements.graphSelection, optionList, valueList);\n",
       "          }\n",
       "          // General (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.generalHead, ui.elements.generalBody, true);\n",
       "          // Data selection (menu item)\n",
       "          ui.composites.menu.setItem(ui.elements.dataHead, ui.elements.dataBody, false);\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.checked = state.useNodeSizeNormalization;\n",
       "          ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "          ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "          ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.checked = state.useEdgeSizeNormalization;\n",
       "          ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "          ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "          ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "          // Nodes\n",
       "          ui.composites.menu.setItem(ui.elements.nodeHead, ui.elements.nodeBody, false);\n",
       "          ui.elements.nodeCheckbox.checked = state.showNodes;\n",
       "          ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeSizeFactor);\n",
       "          ui.elements.nodeSizeFactorSlider.value = state.nodeSizeFactor;\n",
       "          ui.elements.nodeDragFixCheckbox.checked = state.nodeDragFix;\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.checked = state.nodeHoverNeighborhood;\n",
       "          ui.elements.nodeHoverTooltipCheckbox.checked = state.nodeHoverTooltip;\n",
       "          // Node images\n",
       "          ui.composites.menu.setItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody, false);\n",
       "          ui.elements.nodeImageMetaControl.style.display = false;\n",
       "          ui.elements.nodeImageCheckbox.checked = state.showNodeImages;\n",
       "          ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeImageSizeFactor);\n",
       "          ui.elements.nodeImageSizeFactorSlider.value = state.nodeImageSizeFactor;\n",
       "          // Node labels\n",
       "          ui.composites.menu.setItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody, false);\n",
       "          ui.elements.nodeLabelCheckbox.checked = state.showNodeLabels;\n",
       "          ui.elements.nodeLabelBorderCheckbox.checked = state.showNodeLabelBorders;\n",
       "          ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.nodeLabelSizeFactor);\n",
       "          ui.elements.nodeLabelSizeFactorSlider.value = state.nodeLabelSizeFactor;\n",
       "          ui.elements.nodeLabelRotationText.innerHTML = ui.convert.numberToText(state.nodeLabelRotation);\n",
       "          ui.elements.nodeLabelRotationSlider.value = state.nodeLabelRotation;\n",
       "          // Edges\n",
       "          ui.composites.menu.setItem(ui.elements.edgeHead, ui.elements.edgeBody, false);\n",
       "          ui.elements.edgeCheckbox.checked = state.showEdges;\n",
       "          ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeSizeFactor);\n",
       "          ui.elements.edgeSizeFactorSlider.value = state.edgeSizeFactor;\n",
       "          ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(state.edgeCurvature);\n",
       "          ui.elements.edgeCurvatureSlider.value = state.edgeCurvature;\n",
       "          ui.elements.edgeHoverTooltipCheckbox.checked = state.edgeHoverTooltip;\n",
       "          // Edge labels\n",
       "          ui.composites.menu.setItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody, false);\n",
       "          ui.elements.edgeLabelCheckbox.checked = state.showEdgeLabels;\n",
       "          ui.elements.edgeLabelBorderCheckbox.checked = state.showEdgeLabelBorders;\n",
       "          ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(state.edgeLabelSizeFactor);\n",
       "          ui.elements.edgeLabelSizeFactorSlider.value = state.edgeLabelSizeFactor;\n",
       "          ui.elements.edgeLabelRotationText.innerHTML = ui.convert.numberToText(state.edgeLabelRotation);\n",
       "          ui.elements.edgeLabelRotationSlider.value = state.edgeLabelRotation;\n",
       "          // Layout algorithm\n",
       "          ui.composites.menu.setItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody, false);\n",
       "          ui.elements.simulationCheckbox.checked = state.layoutAlgorithmActive;\n",
       "          ui.elements.layoutAlgorithmSelection.value = state.layoutAlgorithm;\n",
       "          ui.elements.centralGravitySlider.value = state.centralGravity;\n",
       "          ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(state.centralGravity);\n",
       "          ui.elements.springLengthSlider.value = state.springLength;\n",
       "          ui.elements.springLengthText.innerHTML = ui.convert.numberToText(state.springLength);\n",
       "          ui.elements.springConstantSlider.value = state.springConstant;\n",
       "          ui.elements.springConstantText.innerHTML = ui.convert.numberToText(state.springConstant);\n",
       "          ui.elements.gravitationalConstantSlider.value = state.gravitationalConstant;\n",
       "          ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(state.gravitationalConstant);\n",
       "          ui.elements.avoidOverlapSlider.value = state.avoidOverlap;\n",
       "          ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(state.avoidOverlap);\n",
       "\n",
       "          ui.initSelectionValues();\n",
       "        },\n",
       "\n",
       "        initSelectionValues(){\n",
       "          function setSelectionOptionsAndValue(element, options, value, values=null){\n",
       "            if(values === null){\n",
       "              values = options;\n",
       "            }\n",
       "            if(!values.includes(value)){\n",
       "              value = values[0];\n",
       "            }\n",
       "            ui.composites.selection(element, options, values);\n",
       "            element.value = value;\n",
       "          }\n",
       "          // Node label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_label_text_data_sources,\n",
       "            state.nodeLabelTextDataSource,\n",
       "          );\n",
       "          // Edge label text data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeLabelTextDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_label_text_data_sources,\n",
       "            state.edgeLabelTextDataSource,\n",
       "          );\n",
       "          // Node size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.nodeSizeDataSourceSelect,\n",
       "            state.parsedData.general.node_properties.node_size_data_sources,\n",
       "            state.nodeSizeDataSource,\n",
       "          );\n",
       "          // Edge size data source\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.edgeSizeDataSourceSelect,\n",
       "            state.parsedData.general.edge_properties.edge_size_data_sources,\n",
       "            state.edgeSizeDataSource,\n",
       "          );\n",
       "          // Layout algorithm\n",
       "          setSelectionOptionsAndValue(\n",
       "            ui.elements.layoutAlgorithmSelection,\n",
       "            [\"Barnes-Hut\", \"Force Atlas 2\", \"Repulsion\", \"Hierarchical repulsion\"],\n",
       "            state.layoutAlgorithm,\n",
       "            [\"barnesHut\", \"forceAtlas2Based\", \"repulsion\", \"hierarchicalRepulsion\"],\n",
       "          );\n",
       "        },\n",
       "\n",
       "        deleteChildElements(element){\n",
       "          while(element.firstChild){\n",
       "            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management\n",
       "            // As of 2019, it is not possible to explicitly or programmatically trigger\n",
       "            // garbage collection in JavaScript.\n",
       "            element.removeChild(element.firstChild);\n",
       "          }\n",
       "        },\n",
       "\n",
       "        convert:{\n",
       "          numberToText(number, numDigits=2) {\n",
       "            return String(Number(number).toFixed(numDigits));\n",
       "          },\n",
       "\n",
       "          boolToDisplayStyle(isVisible){\n",
       "            if(isVisible){\n",
       "              return \"block\";\n",
       "            }\n",
       "            return \"none\";\n",
       "          },\n",
       "\n",
       "          boolToOpacity(isActive){\n",
       "            if(isActive){\n",
       "              return 1.0;\n",
       "            }\n",
       "            return 0.25;\n",
       "          },\n",
       "\n",
       "          boolToTooltipDelay(isActive){\n",
       "            if(isActive){\n",
       "              return 0;\n",
       "            }\n",
       "            return 100000000;\n",
       "          },\n",
       "        },\n",
       "\n",
       "        setBehavior(){\n",
       "          // Window resize (includes ctrl+wheel zoom, landscape/portrait orientation on phones)\n",
       "          window.onresize = function(){\n",
       "            ui.composites.responsiveContainer.adaptToResize();\n",
       "            ui.composites.graph.updateGraphDrawingArea();\n",
       "          }\n",
       "          // Container resize\n",
       "          ui.elements.graphContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.graphContainer.clientHeight);\n",
       "            if(currentHeight != state.graphContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          };\n",
       "          ui.elements.detailsContainer.onmouseup = function(){\n",
       "            const currentHeight = parseInt(ui.elements.detailsContainer.clientHeight);\n",
       "            if(currentHeight != state.detailsContainerHeight){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "            }\n",
       "          };\n",
       "          // Tooltip\n",
       "          ui.elements.tooltipContainer.onmouseover = function(){\n",
       "            ui.composites.tooltip.show();\n",
       "          }\n",
       "          ui.elements.tooltipContainer.onmouseout = function(){\n",
       "            ui.composites.tooltip.hide();\n",
       "          }\n",
       "          // General menu\n",
       "          ui.elements.generalHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.generalHead, ui.elements.generalBody);\n",
       "          };\n",
       "          ui.elements.resetButton.onclick = function(){\n",
       "            app.restart();\n",
       "          };\n",
       "          ui.elements.fullscreenButton.onclick = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              document.exitFullscreen();\n",
       "            } else{\n",
       "              ui.elements.mainContainer.requestFullscreen()\n",
       "                .catch(function(err){\n",
       "                  alert(\"Error attempting to enable full-screen mode: \" + err.message);\n",
       "                });\n",
       "            }\n",
       "          };\n",
       "          ui.elements.mainContainer.onfullscreenchange = function(){\n",
       "            if(document.fullscreenElement){\n",
       "              ui.elements.fullscreenButton.innerText = \"Exit full screen\";\n",
       "            } else{\n",
       "              ui.elements.fullscreenButton.innerText = \"Enter full screen\";\n",
       "            }\n",
       "            // Wait for browser to switch to fullscreen and resize divs, then adapt to new sizes\n",
       "            setTimeout(function(){\n",
       "              ui.composites.responsiveContainer.adaptToFullscreen();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }, 250);\n",
       "          };\n",
       "          ui.elements.pngExportButton.onclick = function(){\n",
       "            ui.composites.download.png(\"graph.png\");\n",
       "          };\n",
       "          ui.elements.jpgExportButton.onclick = function(){\n",
       "            ui.composites.download.jpg(\"graph.jpg\");\n",
       "          };\n",
       "          // Data menu\n",
       "          ui.elements.dataHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.dataHead, ui.elements.dataBody);\n",
       "          };\n",
       "          // - Graph selection\n",
       "          ui.elements.graphSelection.onchange = function(){\n",
       "            const chosenGraphIndex = parseInt(this.value);\n",
       "            state.manager.parseChosenData(chosenGraphIndex);\n",
       "            state.manager.prepareShownData();\n",
       "            ui.initSelectionValues();\n",
       "            ui.composites.graph.createGraph();\n",
       "          };\n",
       "          // - Node label text\n",
       "          ui.elements.nodeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.nodeLabelTextDataSource = this.value;\n",
       "            state.manager.updateNodeLabelTexts();\n",
       "          };\n",
       "          // - Edge label text\n",
       "          ui.elements.edgeLabelTextDataSourceSelect.onchange = function(){\n",
       "            state.edgeLabelTextDataSource = this.value;\n",
       "            state.manager.updateEdgeLabelTexts();\n",
       "          };\n",
       "          // - Node size\n",
       "          ui.elements.nodeSizeDataSourceSelect.onchange = function(){\n",
       "            state.nodeSizeDataSource = this.value;\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useNodeSizeNormalization = this.checked;\n",
       "            ui.elements.nodeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useNodeSizeNormalization);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMin > state.nodeSizeNormalizationMax){\n",
       "              state.nodeSizeNormalizationMax = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMaxSlider.value = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.nodeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.nodeSizeNormalizationMax < state.nodeSizeNormalizationMin){\n",
       "              state.nodeSizeNormalizationMin = state.nodeSizeNormalizationMax;\n",
       "              ui.elements.nodeSizeNormalizationMinSlider.value = state.nodeSizeNormalizationMin;\n",
       "              ui.elements.nodeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.nodeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          // - Edge size\n",
       "          ui.elements.edgeSizeDataSourceSelect.onchange = function(){\n",
       "            state.edgeSizeDataSource = this.value;\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationCheckbox.onchange = function(){\n",
       "            state.useEdgeSizeNormalization = this.checked;\n",
       "            ui.elements.edgeSizeNormalizationContainer.style.display = ui.convert.boolToDisplayStyle(state.useEdgeSizeNormalization);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMinSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMin = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMin > state.edgeSizeNormalizationMax){\n",
       "              state.edgeSizeNormalizationMax = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMaxSlider.value = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMax);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeNormalizationMaxText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeNormalizationMaxSlider.onchange = function(){\n",
       "            state.edgeSizeNormalizationMax = parseFloat(this.value);\n",
       "            if(state.edgeSizeNormalizationMax < state.edgeSizeNormalizationMin){\n",
       "              state.edgeSizeNormalizationMin = state.edgeSizeNormalizationMax;\n",
       "              ui.elements.edgeSizeNormalizationMinSlider.value = state.edgeSizeNormalizationMin;\n",
       "              ui.elements.edgeSizeNormalizationMinText.innerHTML = ui.convert.numberToText(state.edgeSizeNormalizationMin);\n",
       "            }\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          // Nodes menu\n",
       "          ui.elements.nodeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeHead, ui.elements.nodeBody);\n",
       "          };\n",
       "          ui.elements.nodeCheckbox.onchange = function(){\n",
       "            state.showNodes = this.checked;\n",
       "            ui.composites.graph.updateNodeVisibilities();\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeSizeFactorSlider.onchange = function(){\n",
       "            state.nodeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeSizes();\n",
       "          };\n",
       "          ui.elements.nodeDragFixCheckbox.onchange = function(){\n",
       "            state.nodeDragFix = this.checked;\n",
       "          };\n",
       "          ui.elements.nodeHoverNeighborhoodCheckbox.onchange = function(){\n",
       "            state.nodeHoverNeighborhood = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverNeighborhoodBehavior();\n",
       "          };\n",
       "          ui.elements.nodeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.nodeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateNodeHoverTooltipBehavior();\n",
       "          };\n",
       "          ui.elements.nodeReleaseButton.onclick = function(){\n",
       "            ui.composites.graph.simulationManager.releaseFixedNodes();\n",
       "          };\n",
       "          // Node images menu\n",
       "          ui.elements.nodeImageHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeImageHead, ui.elements.nodeImageBody);\n",
       "          };\n",
       "          ui.elements.nodeImageCheckbox.onchange = function(){\n",
       "            state.showNodeImages = this.checked;\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeImageSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeImageSizeFactorSlider.onchange = function(){\n",
       "            state.nodeImageSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeImages();\n",
       "          };\n",
       "          // Node labels menu\n",
       "          ui.elements.nodeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.nodeLabelHead, ui.elements.nodeLabelBody);\n",
       "          };\n",
       "          ui.elements.nodeLabelCheckbox.onchange = function(){\n",
       "            state.showNodeLabels = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showNodeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateNodeLabels();\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.nodeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.nodeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.nodeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateNodeLabelSizes();\n",
       "          };\n",
       "          // Edges menu\n",
       "          ui.elements.edgeHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeHead, ui.elements.edgeBody);\n",
       "          };\n",
       "          ui.elements.edgeCheckbox.onchange = function(){\n",
       "            state.showEdges = this.checked;\n",
       "            ui.composites.graph.updateEdgeVisibility();\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeSizeFactorSlider.onchange = function(){\n",
       "            state.edgeSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeSizes();\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.oninput = function(){\n",
       "            ui.elements.edgeCurvatureText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeCurvatureSlider.onchange = function(){\n",
       "            state.edgeCurvature = parseFloat(this.value);\n",
       "            state.manager.updateEdgeCurvatures();\n",
       "          };\n",
       "          ui.elements.edgeHoverTooltipCheckbox.onchange = function(){\n",
       "            state.edgeHoverTooltip = this.checked;\n",
       "            ui.composites.graph.updateEdgeHoverTooltipBehavior();\n",
       "          };\n",
       "          // Edge labels menu\n",
       "          ui.elements.edgeLabelHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.edgeLabelHead, ui.elements.edgeLabelBody);\n",
       "          };\n",
       "          ui.elements.edgeLabelCheckbox.onchange = function(){\n",
       "            state.showEdgeLabels = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelBorderCheckbox.onchange = function(){\n",
       "            state.showEdgeLabelBorders = this.checked;\n",
       "            ui.composites.graph.updateEdgeLabels();\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.oninput = function(){\n",
       "            ui.elements.edgeLabelSizeFactorText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.edgeLabelSizeFactorSlider.onchange = function(){\n",
       "            state.edgeLabelSizeFactor = parseFloat(this.value);\n",
       "            state.manager.updateEdgeLabelSizes();\n",
       "          };\n",
       "          // Layout algorithm menu\n",
       "          ui.elements.layoutAlgorithmHead.onclick = function(){\n",
       "            ui.composites.menu.toggleItem(ui.elements.layoutAlgorithmHead, ui.elements.layoutAlgorithmBody);\n",
       "          };\n",
       "          ui.elements.simulationCheckbox.onchange = function(){\n",
       "            state.layoutAlgorithmActive = !state.layoutAlgorithmActive;\n",
       "            ui.composites.graph.simulationManager.setActivity(state.layoutAlgorithmActive);\n",
       "          };\n",
       "          ui.elements.layoutAlgorithmSelection.onchange = function(){\n",
       "            state.layoutAlgorithm = this.value;\n",
       "            ui.composites.graph.simulationManager.setAlgorithm();\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.oninput = function(){\n",
       "            ui.elements.centralGravityText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.centralGravitySlider.onchange = function(){\n",
       "            state.centralGravity = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setCentralGravity();\n",
       "          };\n",
       "          ui.elements.springLengthSlider.oninput = function(){\n",
       "            ui.elements.springLengthText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springLengthSlider.onchange = function(){\n",
       "            state.springLength = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringLength();\n",
       "          };\n",
       "          ui.elements.springConstantSlider.oninput = function(){\n",
       "            ui.elements.springConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.springConstantSlider.onchange = function(){\n",
       "            state.springConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setSpringConstant();\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.oninput = function(){\n",
       "            ui.elements.gravitationalConstantText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.gravitationalConstantSlider.onchange = function(){\n",
       "            state.gravitationalConstant = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setGravitationalConstant();\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.oninput = function(){\n",
       "            ui.elements.avoidOverlapText.innerHTML = ui.convert.numberToText(this.value);\n",
       "          };\n",
       "          ui.elements.avoidOverlapSlider.onchange = function(){\n",
       "            state.avoidOverlap = parseFloat(this.value);\n",
       "            ui.composites.graph.simulationManager.setAvoidOverlap();\n",
       "          };\n",
       "        },\n",
       "      }\n",
       "\n",
       "      const app = {\n",
       "        start(){\n",
       "          state.manager.fetchRawDataFromTemplating();\n",
       "          state.manager.parseChosenData(0);\n",
       "          state.manager.prepareShownData();\n",
       "          ui.init();\n",
       "          // Wait a bit to finish UI rendering, then start potentially slow layout computation\n",
       "          setTimeout(function(){\n",
       "            ui.composites.graph.createGraph();\n",
       "            ui.setBehavior();\n",
       "          }, 400);\n",
       "          // Reduce risk of getting stuck with a wrong drawing area size\n",
       "          function checkIfSizeUpdateRequired(){\n",
       "            if(ui.elements.graphContainer.clientWidth != state.graphContainerWidth){\n",
       "              ui.composites.responsiveContainer.adaptToResize();\n",
       "              ui.composites.graph.updateGraphDrawingArea();\n",
       "            }\n",
       "          }\n",
       "          [1, 2, 5, 8, 12, 15, 20, 25, 30, 35, 40, 45, 50, 60, 90].forEach(function(delay){\n",
       "            setTimeout(checkIfSizeUpdateRequired, delay*1000);\n",
       "          })\n",
       "        },\n",
       "\n",
       "        restart(){\n",
       "          app.start();\n",
       "        },\n",
       "      }\n",
       "\n",
       "      // Start website dynamics\n",
       "      app.start();\n",
       "    });\n",
       "  </script>\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "graph.visualize(three = False, style = {\n",
    "    \"node\": {\n",
    "        \"color\": \"blue\",\n",
    "        \"size\": lambda n: n['degree'] * 10,\n",
    "    },\n",
    "    \"edge\": {\n",
    "        \"color\": \"green\",\n",
    "    }\n",
    "}).display(inline = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ca92db7",
   "metadata": {},
   "source": [
    "> **Tip**. As we can see nodes with higher degree are shown in a larger size. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79c8b9d9",
   "metadata": {},
   "source": [
    "## Querying the graph\n",
    "We can also query the graph to get all the nodes and their degree, using `model.query()` context and `graph.Node()` or `graph.Edge()` types. This is useful when we want to use the degree information in further analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "3061873a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>degree</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>David</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Mark</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Emily</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Frank</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Henry</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Nancy</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Alice</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Bob</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Grace</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Lily</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Oscar</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Charlie</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Kevin</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       name  degree\n",
       "3     David       4\n",
       "10     Mark       4\n",
       "4     Emily       3\n",
       "5     Frank       3\n",
       "7     Henry       3\n",
       "11    Nancy       3\n",
       "0     Alice       2\n",
       "1       Bob       2\n",
       "6     Grace       2\n",
       "9      Lily       2\n",
       "12    Oscar       2\n",
       "2   Charlie       1\n",
       "8     Kevin       1"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    person = Person()\n",
    "    node = Node(person)\n",
    "    response = select(person.name, node.degree)\n",
    "\n",
    "response.results.sort_values(by = 'degree', ascending = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca469132",
   "metadata": {},
   "source": [
    "We can also filter the nodes based on the degree value. For example, we can get all the nodes with degree greater or equal to 4.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cf65629a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>name</th>\n",
       "      <th>degree</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>David</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Mark</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x177917750>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    person = Person()\n",
    "    node = Node(person)\n",
    "    node.degree >= 4\n",
    "    response = select(person.name, node.degree)\n",
    "\n",
    "response"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6bb2996",
   "metadata": {},
   "source": [
    "## In-degree and Out-degree\n",
    "\n",
    "We can also calculate the in-degree and out-degree of each node in a directed graph. We can use the `in_degree` and `out_degree` functions. We're going to use the same graph as before, and enrich each node with the in-degree and out-degree information.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6250839f",
   "metadata": {},
   "outputs": [],
   "source": [
    "with model.rule():\n",
    "    person = Person()\n",
    "    person_node = Node(person)\n",
    "    in_degree = graph.compute.indegree(person_node)\n",
    "    out_degree = graph.compute.outdegree(person_node)\n",
    "    person_node.set(in_degree = in_degree, out_degree = out_degree)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9df8ed5",
   "metadata": {},
   "source": [
    "As a final step, we can query the graph to get the degree, in-degree, and out-degree of each node."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "320c823c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>name</th>\n",
       "      <th>degree</th>\n",
       "      <th>in_degree</th>\n",
       "      <th>out_degree</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>Alice</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Bob</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Charlie</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>David</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Emily</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Frank</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Grace</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Henry</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Kevin</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Lily</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Mark</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Nancy</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>Oscar</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<relationalai.dsl.Context at 0x1065fbb50>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with model.query() as select:\n",
    "    person = Person()\n",
    "    node = Node(person)\n",
    "    response = select(person.name, node.degree, node.in_degree, node.out_degree)\n",
    "\n",
    "response"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
